jiangping
2024-07-22 b7fd27a4a7ac72eef5fc142cae9bb63fe69ef233
Merge remote-tracking branch 'origin/master'
已添加8个文件
已修改102个文件
3411 ■■■■■ 文件已修改
server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/APISpaceCaseVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTCollectLikeRequest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentListRequest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCaseInfoResponse.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectLikeInfoResponse.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTRealcaseInfoResponse.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/News.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Users.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/GetZhongTaiDataService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/NewsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/UsersService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/ApiController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CatalogApi.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CommonApi.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerApi.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/api/index.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/app.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/app.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/app.wxss 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/authCard/authCard.less 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/authCard/authCard.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/authCard/authCard.wxss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disCase/index.js 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disCase/index.less 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disCase/index.wxml 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disCase/index.wxss 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disProduct/index.js 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disProduct/index.less 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disProduct/index.wxml 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disProduct/index.wxss 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disRealpic/index.js 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disRealpic/index.less 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disRealpic/index.wxml 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/components/disRealpic/index.wxss 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/consult.js 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/consult.less 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/consult.wxml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/consult.wxss 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/detail.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/detail.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/consult/detail.wxml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/design/design.js 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/design/design.less 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/design/design.wxml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/design/design.wxss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/case.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/case.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/case.less 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/case.wxml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/case.wxss 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/product.js 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/product.wxml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/realpic.js 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/realpic.less 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/realpic.wxml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/detailDis/realpic.wxss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/discover/discover.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/discover/discover.less 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/discover/discover.wxml 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/discover/discover.wxss 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/homeId/index.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/homeId/index.less 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/homeId/index.wxml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/homeId/index.wxss 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/index/index.js 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/index/index.less 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/index/index.wxml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/index/index.wxss 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/mine/mine.js 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/mine/mine.less 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/mine/mine.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/mine/mine.wxss 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/richText/index.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/richText/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/richText/index.wxml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/richText/index.wxss 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/info.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/staff.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/staff.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/store.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/store.less 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/store.wxml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/store/store.wxss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/collect.js 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/collect.wxml 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/favorite.js 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/favorite.wxml 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/index.js 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/index.less 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/index.wxml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/index.wxss 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/mysub.js 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/userinfo/mysub.wxml 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/webView/index.js 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/pages/webView/index.wxml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/project.private.config.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/static/icon/ic_720.png 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_jiaxuan/utils/request.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java
@@ -44,9 +44,9 @@
    List<ZTAreaInfoResponse> getAreaList(ZTAreaListRequest param);
    List<ZTAreaTreeResponse> getAreaTreeList(ZTAreaListRequest param);
    boolean bindCustomerFavorites(ZTBindCusFavoriteDoRequest param);
    ZSZXCatalogResponse getZSZXCatalogs();
    ZTBasePageResponse<ZTCusFavoritesInfoResponse> pageCusFavoriteList(ZTContentListRequest param);
    List<ZTCusCarouselImageResponse> carouselImageList(ZTContentListRequest param);
    ZTCusCarouselImageResponse carouselImageDetail(ZTDataDetailRequest param);
    ZTBasePageResponse<ZTCollectLikeInfoResponse> collectLikePage(ZTCollectLikeRequest param);
}
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java
@@ -83,27 +83,7 @@
     * èŽ·å–ç”¨æˆ·ç™»é™†token
     * @return
     */
   @Override
   public ZSZXCatalogResponse getZSZXCatalogs(){
       ZSZXCatalogResponse response = new ZSZXCatalogResponse();
       ZTCatalogListRequest param = new ZTCatalogListRequest();
       param.setCatalogCode(ZTConstants.CatalogCode.ZHISHUO_ZHUANGXIU);
       List<ZTCatalogInfoResponse> cataList = getCatalogList(param);
        if(cataList!=null ){
            for(ZTCatalogInfoResponse data : cataList){
                if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.JIADE_ID)){
                    response.setJdId(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.CHUFANGSHEJI)){
                    response.setCfsj(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.QW_SHEJI)){
                    response.setQwsj(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.SHOUNASHEJI)){
                    response.setSnsj(data);
                }
            }
        }
       return response;
   }
    /**
     * ç”¨æˆ·ä¿¡æ¯åŒæ­¥
     * @param param
@@ -716,4 +696,25 @@
            log.error("【中台接口:"+name+"】================失败====:\n"+ res);
        }
    }
    /**
     * èŽ·å–æˆ‘çš„å–œæ¬¢/收藏列表
     * @param param
     * @return
     */
    @Override
    public ZTBasePageResponse<ZTCollectLikeInfoResponse> collectLikePage(ZTCollectLikeRequest param){
        ZTBaseResponse<ZTBasePageResponse<ZTCollectLikeInfoResponse>> result = sendHttpRequest(
                ZTConstants.IntegerUrl.FAVORITES_PAGE_URL,
                ZTConstants.IntegerName.FAVORITES_NAME,
                param.getToken(),
                param.getUserType(),
                JSONObject.toJSONString(param ),
                new TypeReference<ZTBaseResponse<ZTBasePageResponse<ZTCollectLikeInfoResponse>>>(){});
        if(result!=null){
            return result.getData();
        }
        return null;
    }
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/APISpaceCaseVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.doumee.biz.zbom.model.zhongtai;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/7/19 11:33
 */
@Data
public class APISpaceCaseVo {
    private String caseInfo;
    /**
     * ç©ºé—´ä¸»å›¾
     */
    private String coverImage;
    private String id;
    /**
     * ç©ºé—´å›¾ç‰‡
     */
    private String[] imgList;
    private String intro;
    private String publishDate;
    private String publishDt;
    /**
     * ç©ºé—´æè¿°
     */
    private String spaceDesc;
    /**
     * ç©ºé—´åç§°
     */
    private String spaceName;
    private String title;
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTCollectLikeRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.biz.zbom.model.zhongtai;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class ZTCollectLikeRequest extends ZTBaseRequst {
    @ApiModelProperty(value = "业务类型 æžšä¸¾å€¼: whole_case real_case product_intro")
    private String businessType;
    @ApiModelProperty(value = "当前页")
    private String pageNum;
    @ApiModelProperty(value = "每页条数")
    private String pageSize;
    @ApiModelProperty(value = "业务类别  collect like")
    private String businessCategory;
    @ApiModelProperty(value = "用户主键",hidden = true)
    private String userId;
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java
@@ -77,6 +77,9 @@
        String WHOLECASE_INFO_URL ="/content/api/wholeCaseDetail";
        String REALCASE_PAGE_LIST_URL ="/content/api/realCasePageList";
        String REALCASE_INFO_URL ="/content/api/realCaseDetail";
        String FAVORITES_PAGE_URL ="/behavior/api/favoritesPageList";
    }
    public interface IntegerName{
        String USER_UPDATE_NAME ="用户信息同步";
@@ -115,5 +118,6 @@
        String REALCASE_PAGE_LIST_NAME ="获取实景案例列表";
        String REALCASE_INFO_NAME ="获取实景案例详情";
        String FAVORITES_NAME ="获取我的喜欢/收藏列表";
    }
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentListRequest.java
@@ -32,8 +32,8 @@
    @ApiModelProperty(value = "排序方式 NORMAL - é»˜è®¤ï¼›HOT - æœ€çƒ­ï¼›LATEST - æœ€æ–°ï¼›")
    private String sortType;
    @ApiModelProperty(value = "多个标签唯一编码的列表,多个标签唯一编码的列表",hidden = true)
    private List<String> tagCode;
    @ApiModelProperty(value = "多个标签唯一编码的列表,多个标签唯一编码的列表")
    private List<String> tagCodes;
    @ApiModelProperty(value = "用户主键",hidden = true)
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCaseInfoResponse.java
@@ -1,5 +1,6 @@
package com.doumee.biz.zbom.model.zhongtai.response;
import com.doumee.biz.zbom.model.zhongtai.APISpaceCaseVo;
import lombok.Data;
import java.io.Serializable;
@@ -10,7 +11,7 @@
 */
@Data
public class ZTCaseInfoResponse implements Serializable {
    private String apiSpaceCaseVos;
    private APISpaceCaseVo[] apiSpaceCaseVos;
    private String caseInfo;
    /**
     * æ”¶è—é‡
@@ -42,4 +43,5 @@
     * æµè§ˆé‡
     */
    private String viewCount;
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectLikeInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.doumee.biz.zbom.model.zhongtai.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * æˆ‘的喜欢/收藏
 */
@Data
public class ZTCollectLikeInfoResponse implements Serializable {
    /**
     * æ”¶è—æ•°
     */
    @ApiModelProperty(value = "id")
    private String id;
    /**
     * æ ‡é¢˜
     */
    @ApiModelProperty(value = "标题")
    private String displayName;
    /**
     * ç¼©ç•¥å›¾
     */
    @ApiModelProperty(value = "缩略图")
    private String thumbnailUrl;
    @ApiModelProperty(value = "浏览量")
    private Integer viewCount;
    @ApiModelProperty(value = "收藏量")
    private Integer collectCount;
}
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTRealcaseInfoResponse.java
@@ -1,5 +1,7 @@
package com.doumee.biz.zbom.model.zhongtai.response;
import com.doumee.biz.zbom.model.zhongtai.APISpaceCaseVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -10,25 +12,67 @@
 */
@Data
public class ZTRealcaseInfoResponse implements Serializable {
    private String caseInfo;
    private String collectCount;
    /**
     * ä¸»å›¾
     */
    @ApiModelProperty(value = "主图")
    private String coverImage;
    private String id;
    private String[] imgList;
    /**
     * æ˜¯å¦æ”¶è— true:收藏  false:未收藏
     */
    @ApiModelProperty(value = "是否收藏 true:收藏  false:未收藏")
    private boolean isCollection;
    /**
     * å‘布日期
     */
    @ApiModelProperty(value = "发布日期")
    private String publishDt;
    /**
     * æ ‡é¢˜
     */
    private String title;
    private String viewCount;
    private String contentCategory;
    private String intro;
    private String linkAddress;
    /**
     * æ‰“开内容
     */
    @ApiModelProperty(value = "打开内容")
    private String openContent;
    /**
     *
     */
    @ApiModelProperty(value = "内容打开方式(内部页面page、视频video、富文本text、外部链接link)")
    private String openType;
    /**
     * å›¾æ–‡è¯¦æƒ…
     */
    private APISpaceCaseVo[] apiSpaceCaseVos;
    /**
     * 720全景地址
     */
    private String layoutUlr;
    private String panorama;
    /**
     * è¯¦æƒ…图片
     */
    private String[] contentImgList;
    /**
     * æ ‡ç­¾
     */
    private String[] contentLabelList;
    /**
     * è¯¦æƒ…文本
     */
    private String contentText;
    private String recommandTitle;
}
server/service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -97,16 +97,15 @@
    public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
        try {
            //判断Token是否超时
            boolean expiration = JwtTokenUtil.isTokenExpired(token);
            if (expiration) {
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            //获取账号ID
            Long memberId = JwtTokenUtil.getJwtPayLoad(token).getUserId();
            Integer userType = JwtTokenUtil.getJwtPayLoad(token).getUserType();
            if(!Constants.equalsInteger(userType,Constants.ZERO)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"无访问权限");
            String tokenRedis = (String) redisTemplate.opsForValue().get(ZTConstants.CUSTOMER+"_"+memberId);
            if(StringUtils.isNotBlank(tokenRedis)){
                if(!tokenRedis.equals(token)){
                    throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
                }
            }else{
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            Member member = dao.queryForObject(" select  *  from `member` where id  = ?  limit 1  ", new BeanPropertyRowMapper<>(Member.class),memberId );
            if(Objects.isNull(member)){
@@ -129,19 +128,15 @@
    public Boolean checkPersonnelLogin(HttpServletRequest request, HttpServletResponse response){
        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
        try {
            if(isDebug){
                return  true;
            }
            //判断Token是否超时
            boolean expiration = JwtTokenUtil.isTokenExpired(token);
            if (expiration) {
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            //获取账号ID
            Long userId = JwtTokenUtil.getJwtPayLoad(token).getUserId();
            Integer userType = JwtTokenUtil.getJwtPayLoad(token).getUserType();
            if(!Constants.equalsInteger(userType,Constants.ONE)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"无访问权限");
            String tokenRedis = (String) redisTemplate.opsForValue().get(ZTConstants.BUSINESS+"_"+userId);
            if(StringUtils.isNotBlank(tokenRedis)){
                if(!tokenRedis.equals(token)){
                    throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
                }
            }else{
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            Users users = dao.queryForObject(" select  *  from `users` where id  = ?  limit 1  ", new BeanPropertyRowMapper<>(Users.class),userId);
            if(Objects.isNull(users)){
@@ -150,7 +145,7 @@
            if(Constants.equalsInteger(users.getIsdeleted(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
            }
            if(!StringUtils.equals(users.getStatus(),Constants.ZERO+"")){
            if(!StringUtils.equals(users.getStatus(),Constants.ONE+"")){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
            }
            request.setAttribute(JwtTokenUtil.UserId_Name, userId);
server/service/src/main/java/com/doumee/dao/business/model/News.java
@@ -98,6 +98,8 @@
    @ApiModelProperty(value = "最近发布备注")
    @ExcelColumn(name="最近发布备注")
    private String publishInfo;
    @ApiModelProperty(value = "操作人")
    @ExcelColumn(name="操作人")
    @TableField(exist = false)
server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -90,7 +90,7 @@
    @ExcelColumn(name="微信openid")
    private String openid;
    @ApiModelProperty(value = "账户状态 0停用,1启用", example = "1")
    @ApiModelProperty(value = "账户状态 0停用,1启用,-1删除", example = "1")
    @ExcelColumn(name="账户状态 0停用,1启用")
    private String status;
server/service/src/main/java/com/doumee/service/business/GetZhongTaiDataService.java
@@ -2,6 +2,7 @@
import com.doumee.biz.zbom.model.zhongtai.*;
import com.doumee.biz.zbom.model.zhongtai.response.*;
import com.doumee.dao.web.response.ZSZXCatalogResponse;
import java.util.List;
@@ -11,6 +12,9 @@
 * @date 2024/07/04 14:40
 */
public interface GetZhongTaiDataService {
    ZSZXCatalogResponse getZSZXCatalogs(Long userId);
    /**
     * åˆ†ç±»æ•°æ®
@@ -147,4 +151,10 @@
     */
    ZTRealcaseInfoResponse getRealcaseInfo(String id,String userType,Long userId);
    /**
     * ä¸­å° - æˆ‘的收藏/喜欢列表
     * @param ztContentListRequest
     * @return
     */
    ZTBasePageResponse<ZTCollectLikeInfoResponse> collectLikePage(ZTCollectLikeRequest ztCollectLikeRequest);
}
server/service/src/main/java/com/doumee/service/business/NewsService.java
@@ -123,4 +123,5 @@
     * @param userId
     */
    void saveShareRecord(Long id,Long userId);
}
server/service/src/main/java/com/doumee/service/business/UsersService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Member;
@@ -118,4 +119,6 @@
    void editUserInfo(EditUsersRequest editUsersRequest);
    String getContentShareImg(Users loginUserInfo, ContentShareImgDto param);
    ZTBaseRequst logOff(Long userId);
}
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java
@@ -132,7 +132,9 @@
                            .eq(CustomerLog::getIsdeleted, Constants.ZERO)
                .eq(Objects.nonNull(pageWrap.getModel().getType()),CustomerLog::getType, pageWrap.getModel().getType())
                .eq(Objects.nonNull(pageWrap.getModel().getMemberId()),Customer::getMemberId, pageWrap.getModel().getMemberId());
        if (pageWrap.getModel().getMemberId() != null) {
            queryWrapper.eq(Customer::getMemberId, pageWrap.getModel().getMemberId());
        }
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.eq(CustomerLog::getId, pageWrap.getModel().getId());
        }
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java
@@ -13,6 +13,7 @@
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.UsersMapper;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.web.response.ZSZXCatalogResponse;
import com.doumee.dao.web.response.ZTBaseInfoResponse;
import com.doumee.service.business.GetZhongTaiDataService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
@@ -52,7 +53,29 @@
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Override
    public ZSZXCatalogResponse getZSZXCatalogs(Long userId){
        ZSZXCatalogResponse response = new ZSZXCatalogResponse();
        ZTCatalogListRequest param = new ZTCatalogListRequest();
        param.setUserId(userId.toString());
        param.setUserType(ZTConstants.CUSTOMER);
        param.setCatalogCode(ZTConstants.CatalogCode.ZHISHUO_ZHUANGXIU);
        List<ZTCatalogInfoResponse> cataList = getCatalogList(param);
        if(cataList!=null ){
            for(ZTCatalogInfoResponse data : cataList){
                if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.JIADE_ID)){
                    response.setJdId(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.CHUFANGSHEJI)){
                    response.setCfsj(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.QW_SHEJI)){
                    response.setQwsj(data);
                }else if(StringUtils.equals(data.getCode(), ZTConstants.CatalogCode.SHOUNASHEJI)){
                    response.setSnsj(data);
                }
            }
        }
        return response;
    }
    @Override
    public List<ZTCatalogInfoResponse> getCatalogList(ZTCatalogListRequest ztCatalogListRequest){
@@ -60,6 +83,10 @@
        || StringUtils.isBlank(ztCatalogListRequest.getCatalogCode())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        ZTBaseInfoResponse ztBaseInfoResponse  =  MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,Long.valueOf(ztCatalogListRequest.getUserId()),ztCatalogListRequest.getUserType());
        System.out.println(JSONObject.toJSONString(ztBaseInfoResponse));
        ztCatalogListRequest.setOpenId(ztBaseInfoResponse.getOpenId());
        ztCatalogListRequest.setToken(ztBaseInfoResponse.getToken());
        return zbomZhongTaiService.getCatalogList(ztCatalogListRequest);
    }
@@ -70,6 +97,9 @@
                || StringUtils.isBlank(ztCatalogListRequest.getCatalogCode())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        ZTBaseInfoResponse ztBaseInfoResponse  =  MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,Long.valueOf(ztCatalogListRequest.getUserId()),ztCatalogListRequest.getUserType());
        ztCatalogListRequest.setOpenId(ztBaseInfoResponse.getOpenId());
        ztCatalogListRequest.setToken(ztBaseInfoResponse.getToken());
        return zbomZhongTaiService.getTagList(ztCatalogListRequest);
    }
@@ -116,8 +146,13 @@
        String data = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_AREA_REDIS_KEY);
        List<ZTAreaTreeResponse> ztAreaTreeResponses = new ArrayList<>();
        if(StringUtils.isBlank(data)){
            ZTBaseInfoResponse ztBaseInfoResponse  =  MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,Long.valueOf(ztAreaListRequest.getUserId()),ztAreaListRequest.getUserType());
            ztAreaListRequest.setOpenId(ztBaseInfoResponse.getOpenId());
            ztAreaListRequest.setToken(ztBaseInfoResponse.getToken());
            ztAreaTreeResponses =  zbomZhongTaiService.getAreaTreeList(ztAreaListRequest);
            redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_AREA_REDIS_KEY,JSONArray.toJSONString(ztAreaTreeResponses));
            if(CollectionUtils.isNotEmpty(ztAreaTreeResponses)){
                redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_AREA_REDIS_KEY,JSONArray.toJSONString(ztAreaTreeResponses));
            }
        }else{
            ztAreaTreeResponses = JSONArray.parseArray(data,ZTAreaTreeResponse.class);
        }
@@ -293,4 +328,23 @@
        return response;
    }
    @Override
    public ZTBasePageResponse<ZTCollectLikeInfoResponse> collectLikePage(ZTCollectLikeRequest ztCollectLikeRequest){
        if(Objects.isNull(ztCollectLikeRequest)
                || Objects.isNull(ztCollectLikeRequest.getPageNum())
                || Objects.isNull(ztCollectLikeRequest.getPageSize())
                || StringUtils.isBlank(ztCollectLikeRequest.getBusinessType())
                || StringUtils.isBlank(ztCollectLikeRequest.getBusinessCategory())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //查询 ä¸­å°
        ZTBaseInfoResponse ztBaseInfoResponse = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,
                Long.valueOf(ztCollectLikeRequest.getUserId()),ztCollectLikeRequest.getUserType());
        ztCollectLikeRequest.setToken(ztBaseInfoResponse.getToken());
        ZTBasePageResponse<ZTCollectLikeInfoResponse> response = zbomZhongTaiService.collectLikePage(ztCollectLikeRequest);
        return response;
    }
}
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -306,18 +306,17 @@
                this.saveCustomerUser(users,member.getId());
            }else{
                ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(member);
                if(Objects.isNull(ztUserGetTokenResponse)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台服务调起失败!");
                }else{
                if(!Objects.isNull(ztUserGetTokenResponse)){
                    member.setToken(ztUserGetTokenResponse.getToken());
                    memberMapper.updateById(member);
                }
                this.saveCustomerUser(users,member.getId());
                member = this.getMemberInfo(member.getId());
            }
            //创建token
            JwtPayLoad payLoad = new JwtPayLoad(member.getId(),Constants.ZERO);
            String token = JwtTokenUtil.generateToken(payLoad);
            redisTemplate.opsForValue().set(ZTConstants.CUSTOMER+"_"+member.getId(),token);
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
            accountResponse.setSessionKey(session.getSessionKey());
@@ -439,7 +438,7 @@
        ztUserInfoUpdateRequest.setHouseLayout(Constants.getHouseLayout(member.getHousetype()));
        ZTBaseResponse userUpdateInfo = zbomZhongTaiService.userUpdateInfo(ztUserInfoUpdateRequest);
        if(Objects.isNull(userUpdateInfo)||userUpdateInfo.getCode()!=200){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台信息更新失败,请联系管理员");
            return null;
        }
        ZTUserGetTokenResponse ztUserGetTokenResponse = (ZTUserGetTokenResponse) userUpdateInfo.getData();
        return ztUserGetTokenResponse;
@@ -545,7 +544,8 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isBlank(member.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已注销");
            redisTemplate.delete(ZTConstants.CUSTOMER+"_"+ member.getId());
           return null;
        }
        //校验用户token信息
        MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,member.getId(),ZTConstants.CUSTOMER);
@@ -559,6 +559,7 @@
                .set(Member::getEditDate,new Date())
                .eq(Member::getId,member.getId())
        );
        redisTemplate.delete(ZTConstants.CUSTOMER+"_"+ member.getId());
        return ztBaseRequst;
    }
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.dingtalk.api.request.OapiMaterialNewsListRequest;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -420,4 +421,5 @@
}
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -4,8 +4,11 @@
import cn.hutool.core.date.DateUnit;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.biz.zbom.model.IamUserRoleModel;
import com.doumee.biz.zbom.model.IamUserTypeModel;
import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst;
import com.doumee.biz.zbom.model.zhongtai.ZTConstants;
import com.doumee.config.Jwt.JwtPayLoad;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.core.annotation.excel.ExcelImporter;
@@ -21,6 +24,7 @@
import com.doumee.core.utils.tyyun.TyyZosUtil;
import com.doumee.dao.admin.request.ShopImport;
import com.doumee.dao.admin.request.UserImport;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.ShopMapper;
import com.doumee.core.wx.WxMiniConfig;
import com.doumee.dao.business.SmsEmailMapper;
@@ -81,6 +85,11 @@
    private SmsEmailMapper smsEmailMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private ZbomZhongTaiService zbomZhongTaiService;
    @Override
    public Long create(Users users) {
@@ -323,12 +332,12 @@
        }
        Users users = usersMapper.selectOne(new QueryWrapper<Users>().lambda().eq(Users::getPhone,phone).last("limit 1"));
        if(Objects.isNull(users)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到账户信息");
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,账号信息不存在!");
        }
        if(!Constants.equalsInteger(users.getIsdeleted(), Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已删除");
        }
        if(!StringUtils.equals(users.getStatus(),Constants.ZERO+"")){
        if(StringUtils.equals(users.getStatus(),Constants.ZERO+"")){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已停用,请联系管理员");
        }
        //验证短信
@@ -355,6 +364,7 @@
        //创建token
        JwtPayLoad payLoad = new JwtPayLoad(users.getId(),Constants.ONE);
        String token = JwtTokenUtil.generateToken(payLoad);
        redisTemplate.opsForValue().set(ZTConstants.BUSINESS+"_"+users.getId(),token);
        AccountResponse accountResponse = new AccountResponse();
        accountResponse.setToken(token);
        accountResponse.setUsers(users);
@@ -382,10 +392,14 @@
            if(!StringUtils.equals(users.getStatus(),Constants.ZERO+"")){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已停用,请联系管理员");
            }
            users.setOpenid(openId);
            usersMapper.updateById(users);
            //创建token
            JwtPayLoad payLoad = new JwtPayLoad(users.getId(),Constants.ONE);
            String token = JwtTokenUtil.generateToken(payLoad);
            redisTemplate.opsForValue().set(ZTConstants.BUSINESS+"_"+users.getId(),token);
            accountResponse.setToken(token);
            getUsersDetail(users);
            accountResponse.setUsers(users);
            return accountResponse;
        } catch (WxErrorException e) {
@@ -756,7 +770,7 @@
        if(Objects.isNull(users)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(Constants.equalsInteger(users.getIsdeleted(),Constants.ZERO)){
        if(!Constants.equalsInteger(users.getIsdeleted(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户已禁用");
        }
        getUsersDetail(users);
@@ -821,7 +835,31 @@
    @Override
    public ZTBaseRequst logOff(Long userId){
        Users users = usersMapper.selectById(userId);
        if(Objects.isNull(users)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isBlank(users.getOpenid())){
            redisTemplate.delete(ZTConstants.BUSINESS+"_"+ users.getId());
            return null;
        }
        //校验用户token信息
        MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,users.getId(), ZTConstants.BUSINESS);
        //调起中台注销接口
        ZTBaseRequst ztBaseRequst = new ZTBaseRequst();
        ztBaseRequst.setUserType(ZTConstants.BUSINESS);
        ztBaseRequst.setOpenId(users.getOpenid());
        ztBaseRequst.setToken(users.getToken());
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getOpenid,null)
                .set(Users::getEditDate,new Date())
                .eq(Users::getId,users.getId())
        );
        redisTemplate.delete(ZTConstants.BUSINESS+"_"+ users.getId());
        return ztBaseRequst;
    }
}
server/web/src/main/java/com/doumee/api/web/ApiController.java
@@ -52,9 +52,9 @@
        return obj != null ? (Long) obj : null;
    }
    protected Long getUserId() {
        if(isDebug){
            return 2L;
        }
//        if(isDebug){
//            return 2L;
//        }
        Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserId_Name);
        return obj != null ? (Long) obj : null;
    }
server/web/src/main/java/com/doumee/api/web/CatalogApi.java
@@ -36,10 +36,4 @@
    @Autowired
    public SmsEmailService smsEmailService;
    @ApiOperation(value = "C端小程序-获取首页志说装修四个模块类目数据", notes = "获取首页志说装修四个模块类目数据")
    @PostMapping("/getZSZXCatalogs")
    public ApiResponse<ZSZXCatalogResponse> getZSZXCatalogs() {
        return  ApiResponse.success(zbomZhongTaiService.getZSZXCatalogs());
    }
}
server/web/src/main/java/com/doumee/api/web/CommonApi.java
@@ -3,6 +3,7 @@
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.biz.zbom.model.zhongtai.ZTAreaListRequest;
import com.doumee.biz.zbom.model.zhongtai.ZTConstants;
import com.doumee.biz.zbom.model.zhongtai.response.ZTAreaInfoResponse;
import com.doumee.biz.zbom.model.zhongtai.response.ZTAreaTreeResponse;
import com.doumee.config.annotation.LoginRequired;
@@ -60,8 +61,12 @@
    }
    @LoginRequired
    @ApiOperation(value = "获取区划全量树形信息", notes = "客户端小程序")
    @PostMapping("/getAreaTree")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<ZTAreaTreeResponse>> getAreaTree(@RequestBody ZTAreaListRequest ztAreaListRequest) {
        if(StringUtils.isBlank(ztAreaListRequest.getPid())){
            ztAreaListRequest.setPid("1");
@@ -69,6 +74,8 @@
        if(StringUtils.isBlank(ztAreaListRequest.getLevel())){
            ztAreaListRequest.setLevel("5");
        }
        ztAreaListRequest.setUserId(getMemberId()+"");
        ztAreaListRequest.setUserType(ZTConstants.CUSTOMER);
        List<ZTAreaTreeResponse> ztAreaInfoResponses =  getZhongTaiDataService.getZhongTaiAreaTree(ztAreaListRequest);
        return  ApiResponse.success(ztAreaInfoResponses);
    }
server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -2,10 +2,7 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.biz.zbom.model.zhongtai.ZTCatalogListRequest;
import com.doumee.biz.zbom.model.zhongtai.ZTConstants;
import com.doumee.biz.zbom.model.zhongtai.ZTContentListRequest;
import com.doumee.biz.zbom.model.zhongtai.ZTDataDetailRequest;
import com.doumee.biz.zbom.model.zhongtai.*;
import com.doumee.biz.zbom.model.zhongtai.response.*;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
@@ -35,6 +32,7 @@
import java.beans.Customizer;
import java.io.InputStream;
import java.util.List;
import java.util.Objects;
/**
 * Created by IntelliJ IDEA.
@@ -209,7 +207,10 @@
    @ApiOperation(value = "用户注销", notes = "客户端小程序")
    @GetMapping("/logOff")
    public ApiResponse logOff() {
        getZhongTaiDataService.userLogout(memberService.logOff(getMemberId()));
        ZTBaseRequst ztBaseRequst = memberService.logOff(getUserId());
        if(Objects.nonNull(ztBaseRequst)){
            getZhongTaiDataService.userLogout(ztBaseRequst);
        }
        return  ApiResponse.success("操作成功");
    }
@@ -258,18 +259,6 @@
    }
    @LoginRequired
    @ApiOperation(value = "测试小程序Token", notes = "客户端小程序")
    @GetMapping("/testToken")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse testToken () {
        systemDictDataBiz.updWxMiniToken();
        return ApiResponse.success("更新成功");
    }
    @LoginRequired
    @ApiOperation(value = "获取分享小程序二维码(图片流,img标签src指定)", notes = "客户端小程序")
@@ -297,7 +286,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<PageData<CustomerLog>> customerLogPage(@RequestBody PageWrap<CustomerLog> pageWrap) {
        pageWrap.getModel().setCostomerId(getMemberId().toString());
        pageWrap.getModel().setMemberId(getMemberId());
        pageWrap.getModel().setIsHiddenPhone(Constants.ZERO);
        return ApiResponse.success(customerLogService.findPage(pageWrap));
    }
@@ -312,6 +301,8 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<ZTCatalogInfoResponse>> getCatalogList (@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        ztCatalogListRequest.setUserId(getMemberId()+"");
        ztCatalogListRequest.setUserType(ZTConstants.CUSTOMER);
        List<ZTCatalogInfoResponse> ztCatalogInfoResponseList = getZhongTaiDataService.getCatalogList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztCatalogInfoResponseList);
    }
@@ -325,6 +316,8 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<ZTTagInfoResponse>> getCataLogTagList(@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        ztCatalogListRequest.setUserId(getMemberId()+"");
        ztCatalogListRequest.setUserType(ZTConstants.CUSTOMER);
        List<ZTTagInfoResponse> ztTagInfoResponseList = getZhongTaiDataService.getCataLogTagList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztTagInfoResponseList);
    }
@@ -555,7 +548,17 @@
    }
    @LoginRequired
    @ApiOperation(value = "我的收藏/喜欢列表 - ä¸­å°", notes = "客户端小程序")
    @PostMapping("/collectLikePage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<ZTBasePageResponse<ZTCollectLikeInfoResponse>> collectLikePage(@RequestBody ZTCollectLikeRequest ztCollectLikeRequest) {
        ztCollectLikeRequest.setUserId(getMemberId()+"");
        ztCollectLikeRequest.setUserType(ZTConstants.CUSTOMER);
        ZTBasePageResponse<ZTCollectLikeInfoResponse>  ztBasePageResponse= getZhongTaiDataService.collectLikePage(ztCollectLikeRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
}
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java
@@ -2,6 +2,7 @@
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
@@ -9,6 +10,7 @@
import com.doumee.dao.business.model.News;
import com.doumee.dao.web.response.DailyUpdatesResponse;
import com.doumee.dao.web.response.ZSZXCatalogResponse;
import com.doumee.service.business.GetZhongTaiDataService;
import com.doumee.service.business.NewsService;
import com.doumee.service.business.SmsEmailService;
import io.swagger.annotations.Api;
@@ -45,11 +47,15 @@
    @Autowired
    public NewsService newsService;
    @Autowired
    public GetZhongTaiDataService getZhongTaiDataService;
    @LoginRequired
    @ApiOperation(value = "【C端小程序】获取首页志说装修四个模块类目数据", notes = "获取首页志说装修四个模块类目数据,背景图暂时写死,参考UI")
    @PostMapping("/getZSZXCatalogs")
    public ApiResponse<ZSZXCatalogResponse> getZSZXCatalogs() {
        return  ApiResponse.success(zbomZhongTaiService.getZSZXCatalogs());
        return  ApiResponse.success(getZhongTaiDataService.getZSZXCatalogs(getMemberId()));
    }
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -4,6 +4,7 @@
import com.doumee.biz.zbom.model.crm.CrmCustomerListRequest;
import com.doumee.biz.zbom.model.crm.response.CRMBaseResponse;
import com.doumee.biz.zbom.model.crm.response.CRMCustomerListResponse;
import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst;
import com.doumee.biz.zbom.model.zhongtai.ZTCatalogListRequest;
import com.doumee.biz.zbom.model.zhongtai.ZTConstants;
import com.doumee.biz.zbom.model.zhongtai.ZTContentListRequest;
@@ -17,6 +18,7 @@
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.business.model.SmsEmail;
import com.doumee.dao.business.model.Users;
import com.doumee.dao.web.reqeust.EditMemberRequest;
import com.doumee.dao.web.reqeust.EditShopDTO;
import com.doumee.dao.web.reqeust.EditUsersRequest;
@@ -34,6 +36,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
 * Created by IntelliJ IDEA.
@@ -115,9 +118,8 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse getUserDetail() {
        usersService.usersDetailById(getUserId());
        return  ApiResponse.success("操作成功");
    public ApiResponse<Users> getUserDetail() {
        return  ApiResponse.success("操作成功",usersService.usersDetailById(getUserId()));
    }
    @UserLoginRequired
@@ -131,6 +133,7 @@
        usersService.editUserInfo(editUsersRequest);
        return  ApiResponse.success("更新成功");
    }
    @UserLoginRequired
    @ApiOperation(value = "门店分页", notes = "员工端小程序")
    @PostMapping("/shopPage")
@@ -154,7 +157,7 @@
    @UserLoginRequired
    @ApiOperation(value = "修改门店信息", notes = "员工端小程序")
    @GetMapping("/updShop")
    @PostMapping("/updShop")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
@@ -163,11 +166,16 @@
        return ApiResponse.success("操作成功");
    }
    @UserLoginRequired
    @ApiOperation(value = "获取个人名片", notes = "员工端小程序")
    @PostMapping("/getUserCard")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getUserCard() {
        return  ApiResponse.success(usersService.getUserCard(this.getLoginUserInfo()));
    }
    @ApiOperation(value = "获取内容分享海报", notes = "获取内容分享海报,加小程序码")
    @PostMapping("/getContentShareImg")
@@ -208,5 +216,20 @@
        List<ZTTagInfoResponse> ztTagInfoResponseList = getZhongTaiDataService.getCataLogTagList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztTagInfoResponseList);
    }
    @UserLoginRequired
    @ApiOperation(value = "用户注销", notes = "员工端小程序")
    @PostMapping("/logOff")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse logOff() {
        ZTBaseRequst ztBaseRequst = usersService.logOff(getUserId());
        if(Objects.nonNull(ztBaseRequst)){
            getZhongTaiDataService.userLogout(ztBaseRequst);
        }
        return  ApiResponse.success("操作成功");
    }
}
wechat_jiaxuan/api/index.js
@@ -160,6 +160,28 @@
    data
  })
}
// åˆ†ç±»æ¡ˆä¾‹ è¯¦æƒ…
export const getWholecaseInfo = (data) => {
  return request({
    url: '/web/customer/getWholecaseInfo',
    data
  })
}
// åˆ†ç±»å®žæ™¯ åˆ†é¡µåˆ—表 ä¸­å°
export const getZhongTaiRealcasePage = (data) => {
  return request({
    url: '/web/customer/getZhongTaiRealcasePage',
    method: 'POST',
    data
  })
}
// åˆ†ç±»å®žæ™¯ è¯¦æƒ…
export const getRealcaseInfo = (data) => {
  return request({
    url: '/web/customer/getRealcaseInfo',
    data
  })
}
// æˆ‘的家 åˆ†é¡µåˆ—表 ä¸­å°
export const getZhongTaiVideoPage = (data) => {
  return request({
@@ -199,6 +221,14 @@
    data
  })
}
// æˆ‘çš„ æ”¶è—/喜欢列表
export const collectLikePage = (data) => {
  return request({
    url: '/web/customer/collectLikePage',
    method: 'POST',
    data
  })
}
// å†…容 å–œæ¬¢
export const likeContent = (data) => {
  return request({
wechat_jiaxuan/app.js
@@ -1,4 +1,6 @@
import { wxLoginCustomer } from './api/index'
import {
  wxLoginCustomer
} from './api/index'
App({
  globalData: {
    primary: '#B08771',
@@ -10,7 +12,8 @@
    if (WindowInfo.safeArea.top > 20) {
      this.globalData.bottomLift = WindowInfo.screenHeight - WindowInfo.safeArea.bottom;
    }
    //
    // æŽˆæƒç™»å½•
    const member = wx.getStorageSync('member')
    wx.login({
      timeout: 5000,
      success(res) {
@@ -37,5 +40,7 @@
        console.log(err)
      }
    })
  }
})
wechat_jiaxuan/app.json
@@ -25,7 +25,8 @@
    "pages/userinfo/collect",
    "pages/userinfo/favorite",
    "pages/sets/index",
    "pages/sets/protocol"
    "pages/sets/protocol",
    "pages/richText/index"
  ],
  "window": {
    "navigationBarTitleText": "志邦家选",
wechat_jiaxuan/app.wxss
@@ -1,5 +1,5 @@
view,text{
view,text,scroll-view,image{
  box-sizing: border-box;
}
page{
@@ -76,7 +76,9 @@
button:after {
  content: none;
}
::-webkit-scrollbar {
  display: none;
}
button::after {
  border: none;
}
wechat_jiaxuan/components/authCard/authCard.less
@@ -113,6 +113,14 @@
            width: 36rpx;
          }
        }
        .text{
          flex: 1;
          overflow : hidden;
          text-overflow: ellipsis;
          display: -webkit-box;
          -webkit-line-clamp: 2;
          -webkit-box-orient: vertical;
        }
      }
      .addr{
        display: flex;
wechat_jiaxuan/components/authCard/authCard.wxml
@@ -32,7 +32,7 @@
          <view class="icon">
            <image src="../../static/icon/mendian_item.png" mode="widthFix"></image>
          </view>
          <text>{{ item.name }}</text>
          <text class="text">{{ item.name }}</text>
        </view>
        <view class="addr">
          <view class="left">
wechat_jiaxuan/components/authCard/authCard.wxss
@@ -114,6 +114,14 @@
.wrap2 .list .item .name .icon image {
  width: 36rpx;
}
.wrap2 .list .item .name .text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
.wrap2 .list .item .addr {
  display: flex;
  justify-content: space-between;
wechat_jiaxuan/components/disCase/index.js
@@ -4,7 +4,7 @@
   * ç»„件的属性列表
   */
  properties: {
    menuButtonInfo: Object
  },
  data: {
    activeIndex: -1,
@@ -15,9 +15,10 @@
    cateList: [],
    dataList: [],
    total: 0,
    pageNum: 1,
    pageSize: 10,
    search: '',
    query: '',
    sortType: 'NORMAL',
    catalogCode: 'whole_case'
  },
@@ -28,7 +29,7 @@
    getCatelist(){
      const { catalogCode } = this.data
      getCataLogTagList({
        catalogCode: 'real_case'
        catalogCode
      }).then(res => {
        if(res.data && res.data.length > 0){
          this.setData({
@@ -41,16 +42,35 @@
      })
    },
    getList() {
      const { sortType, search, tagCodes, pageNum, pageSize } = this.data
      const { sortType, query, tagCodes, pageNum, pageSize,catalogCode } = this.data
      getZhongTaiWholecasePage({
        catalogCode: 'whole_case',tagCodes,pageNum,pageSize, sortType,search
        catalogCode,pageNum,pageSize,tagCodes, sortType,query
      }).then(res => {
        this.setData({ dataList: res.data.records })
        if(res.data){
          this.setData({
            total: res.data.total,
            dataList: [...this.data.dataList, ...res.data.records],
          })
        }
      })
    },
    scrolltolower() {
      console.log('触底事件');
      const { total, dataList, pageNum } = this.data
      if(total > dataList.length){
        this.setData({ pageNum: pageNum + 1 })
        this.getList()
      }else{
        wx.showToast({
          title: '暂无更多数据',
          icon: 'none'
        })
      }
    },
    statusChange(e) {
      const sortType = e.currentTarget.dataset.status
      this.setData({sortType})
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.getList()
    },
    handleAction(e){
@@ -64,8 +84,9 @@
      })
    },
    handleDetail(e) {
      const id = e.currentTarget.dataset.id
      wx.navigateTo({
        url: '/pages/detailDis/case',
        url: '/pages/detailDis/case?id=' + id,
      })
    },
    tagClick(e) {
@@ -75,6 +96,15 @@
      const index = tagCodes.indexOf(code)
      
      if(index === -1){
        // åŒparam里code重复
        if(activeParam && activeParam.length > 0){
          activeParam.forEach(item => {
            const indexTemp = tagCodes.indexOf(item.labelValueCode)
            if(indexTemp > -1){
              tagCodes.splice(indexTemp, 1)
            }
          })
        }
        tagCodes.push(code)
        cateList[activeIndex].paramIndex = paramIndex
        cateList[activeIndex].paramName = activeParam[paramIndex].labelValueName
@@ -83,6 +113,7 @@
        cateList[activeIndex].paramIndex = -1
        cateList[activeIndex].paramName = ''
      }
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.setData({ tagCodes, cateList })
      console.log('tagCodes', tagCodes);
    },
@@ -99,6 +130,7 @@
    },
    subParam() {
      this.setData({ activeParam: [] })
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.getList()
    },
    changeShowParams(e){
wechat_jiaxuan/components/disCase/index.less
@@ -1,4 +1,4 @@
.search_wrap {
.search_wrap{
  width: 670rpx;
  height: 72rpx;
  margin: 24rpx auto;
@@ -8,22 +8,30 @@
  display: flex;
  align-items: center;
  background-color: #F7F7F7;
  image {
  image{
    width: 28rpx;
    margin-right: 16rpx;
  }
}
.app {
  height: 100%;
  width: 100%;
  .home_content{
    height: 100%;
  }
}
.main_content {
  height: calc(100% - 120rpx);
.home_top{
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content{
  height: 100%;
  padding-top: 120rpx;
  .query_wrap_scroll{
    width: 670rpx;
    width: 750rpx;
    padding: 0 40rpx;
  }
  .query_wrap {
@@ -97,13 +105,11 @@
  .status {
    display: flex;
    padding: 0rpx 40rpx;
    margin: 20rpx 0;
    align-items: center;
    height: 100rpx;
    .active {
      color: var(--themeColor);
    }
    .separate {
      margin: 0 12rpx;
      width: 1rpx;
@@ -112,7 +118,9 @@
    }
  }
  .goods_list{
    box-sizing: border-box;
    padding: 12rpx 40rpx;
    height: calc( 100% - 188rpx);
    .item{
      width: 100%;
      margin-bottom: 32rpx;
wechat_jiaxuan/components/disCase/index.wxml
@@ -1,54 +1,59 @@
<view class="app">
  <view class="search_wrap">
    <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
    <input bindblur="bindblur" model:value="{{ search }}" type="text" placeholder="搜索案例名称" />
  <view class="home_top" style="top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px">
    <view class="search_wrap">
      <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
      <input bindblur="bindblur" model:value="{{ query }}" type="text" placeholder="搜索案例名称" />
    </view>
  </view>
  <!--  -->
  <view class="main_content">
    <scroll-view class="query_wrap_scroll" scroll-x>
      <view class="query_wrap">
        <view data-index="{{ index }}" wx:for="{{ cateList }}" class="item" bindtap="changeShowParams">
          <view class="name">{{ item.paramName || item.labelName }}</view>
          <van-icon name="{{ activeIndex === index ? 'arrow-up' : 'arrow-down' }}" />
        </view>
      </view>
    </scroll-view>
    <!--  param -->
    <view wx:if="{{ activeParam && activeParam.length > 0 }}" class="query_param">
      <view class="list">
        <view data-index="{{index}}" data-code="{{ item.labelValueCode }}" bindtap="tagClick" wx:for="{{ activeParam }}" class="item {{ cateList[activeIndex].paramIndex === index ? 'active' : '' }}">{{ item.labelValueName }}</view>
      </view>
      <view class="btns">
        <view class="btn" bindtap="cancelParam">取消</view>
        <view bindtap="subParam" class="btn sub">确认</view>
      </view>
    </view>
    <view class="status">
      <view class="item {{ sortType == 'NORMAL' ? 'active' : '' }}" data-status="NORMAL" bindtap="statusChange">默认</view>
      <view class="separate"></view>
      <view class="item {{ sortType == 'HOT' ? 'active' : '' }}" data-status="HOT" bindtap="statusChange">最热</view>
      <view class="separate"></view>
      <view class="item {{ sortType == 'LATEST' ? 'active' : '' }}" data-status="LATEST" bindtap="statusChange">最新</view>
    </view>
    <!-- goods_list -->
    <view class="goods_list">
      <view wx:for="{{ dataList }}" class="item" bindtap="handleDetail">
        <view class="img_wrap">
          <image src="{{ item.coverImage }}" class="img"></image>
          <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
        </view>
        <view class="content">
          <view class="name">{{ item.title }}</view>
          <view class="info">
            <image wx:if="{{ !item.isCollection }}" data-code="like" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else data-code="like_cancel" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">{{ item.collectCount }}</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>{{ item.viewCount }}</text>
  <view class="home_content" style="padding-top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px;">
    <view class="main_content">
      <scroll-view class="query_wrap_scroll" scroll-x>
        <view class="query_wrap">
          <view data-index="{{ index }}" wx:for="{{ cateList }}" class="item" bindtap="changeShowParams">
            <view class="name">{{ item.paramName || item.labelName }}</view>
            <van-icon name="{{ activeIndex === index ? 'arrow-up' : 'arrow-down' }}" />
          </view>
        </view>
      </scroll-view>
      <!--  param -->
      <view wx:if="{{ activeParam && activeParam.length > 0 }}" class="query_param">
        <view class="list">
          <view data-index="{{index}}" data-code="{{ item.labelValueCode }}" bindtap="tagClick" wx:for="{{ activeParam }}" class="item {{ cateList[activeIndex].paramIndex === index ? 'active' : '' }}">{{ item.labelValueName }}</view>
        </view>
        <view class="btns">
          <view class="btn" bindtap="cancelParam">取消</view>
          <view bindtap="subParam" class="btn sub">确认</view>
        </view>
      </view>
      <view class="status">
        <view class="item {{ sortType == 'NORMAL' ? 'active' : '' }}" data-status="NORMAL" bindtap="statusChange">默认</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'HOT' ? 'active' : '' }}" data-status="HOT" bindtap="statusChange">最热</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'LATEST' ? 'active' : '' }}" data-status="LATEST" bindtap="statusChange">最新</view>
      </view>
      <!-- goods_list -->
      <scroll-view bindscrolltolower="scrolltolower" scroll-y    enable-passive enable-flex class="goods_list">
        <view wx:for="{{ dataList }}" data-id="{{ item.id }}" class="item" bindtap="handleDetail">
          <view class="img_wrap">
            <image src="{{ item.coverImage }}" class="img"></image>
            <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
          </view>
          <view class="content">
            <view class="name">{{ item.title }}</view>
            <view class="info">
              <image wx:if="{{ !item.collection }}" data-code="like" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
              <image wx:else data-code="like_cancel" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
              <text class="num {{item.collection ? 'primary' : ''}}">{{ item.collectCount }}</text>
              <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
              <text>{{ item.viewCount }}</text>
            </view>
          </view>
        </view>
      </scroll-view>
    </view>
  </view>
</view>
wechat_jiaxuan/components/disCase/index.wxss
@@ -17,11 +17,21 @@
  height: 100%;
  width: 100%;
}
.app .home_content {
  height: 100%;
}
.home_top {
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content {
  height: calc(100% - 120rpx);
  height: 100%;
  padding-top: 120rpx;
}
.main_content .query_wrap_scroll {
  width: 670rpx;
  width: 750rpx;
  padding: 0 40rpx;
}
.main_content .query_wrap {
@@ -92,8 +102,8 @@
.main_content .status {
  display: flex;
  padding: 0rpx 40rpx;
  margin: 20rpx 0;
  align-items: center;
  height: 100rpx;
}
.main_content .status .active {
  color: var(--themeColor);
@@ -105,7 +115,9 @@
  background-color: #333333;
}
.main_content .goods_list {
  box-sizing: border-box;
  padding: 12rpx 40rpx;
  height: calc(100% - 188rpx);
}
.main_content .goods_list .item {
  width: 100%;
wechat_jiaxuan/components/disProduct/index.js
@@ -1,29 +1,41 @@
import { getCatalogList, getZhongTaiProductPage } from '../../api/index'
import { getCatalogList,getCataLogTagList, getZhongTaiProductPage } from '../../api/index'
Component({
  /**
   * ç»„件的属性列表
   */
  properties: {
    menuButtonInfo: Object
  },
  /**
   * ç»„件的初始数据
   */
  data: {
    showOne: false,
    showTwo: false,
    activeIndex: -1,
    activeParam: [],
    tagCodes: [],
    cateList: [],
    secondCateList: [],
    datalist: [],
    pageNum: 1,
    pageSize: 10,
    search: '',
    total: 0,
    query: '',
    sortType: 'NORMAL',
    catalogCode: ""
  },
  attached() {
    this.getCatelist()
    var app = getApp()
    console.log('globalData', app.globalData);
    if(app.globalData.catalogCode){
      this.setData({ catalogCode: app.globalData.catalogCode })
      setTimeout(() => {
        console.log('catalogCode', this.data.catalogCode);
        getApp().globalData.catalogCode = ''
      }, 2000)
    }
  },
  methods: {
    getCatelist(){
@@ -32,22 +44,33 @@
      }).then(res => {
        if(res.data && res.data.length > 0){
          this.setData({
            catalogCode: res.data[0].code,
            catalogCode: this.data.catalogCode || res.data[0].code,
            cateList: res.data
          })
          this.getTag()
          setTimeout(() => {
            this.getList()
          }, 300)
        }
      })
    },
    getTag() {
      const catalogCode = this.data.catalogCode
      getCataLogTagList({
        catalogCode
      }).then(res => {
        this.setData({
          secondCateList: res.data || [],
        })
      })
    },
    bindblur() {
      this.getList()
    },
    getList() {
      const { catalogCode, pageNum, pageSize, sortType, search } = this.data
      const { catalogCode,tagCodes, pageNum, pageSize, sortType, query } = this.data
      getZhongTaiProductPage({
        catalogCode,pageNum,pageSize,sortType,search
        catalogCode,pageNum,pageSize,sortType,query,tagCodes
      }).then(res => {
        this.setData({
          datalist: [...this.data.datalist, ...res.data.records],
@@ -55,14 +78,30 @@
        })
      })
    },
    scrolltolower() {
      console.log('触底事件');
      const { total, datalist, pageNum } = this.data
      if(total > datalist.length){
        this.setData({ pageNum: pageNum + 1 })
        this.getList()
      }else{
        wx.showToast({
          title: '暂无更多数据',
          icon: 'none'
        })
      }
    },
    cateClick(e) {
      const catalogCode = e.currentTarget.dataset.code
      this.setData({ catalogCode })
      this.setData({ pageNum: 1,datalist: [],total: 0})
      this.getTag()
      this.getList()
    },
    statusChange(e) {
      const sortType = e.currentTarget.dataset.status
      this.setData({sortType})
      this.setData({ pageNum: 1,datalist: [],total: 0})
      this.getList()
    },
    handleDetail(e) {
@@ -71,15 +110,62 @@
        url: '/pages/detailDis/product?id=' + id,
      })
    },
    changeOne(){
      const showOne = !this.data.showOne
      this.setData({showOne})
      this.setData({showTwo: false})
    tagClick(e) {
      const code = e.currentTarget.dataset.code
      const paramIndex = e.currentTarget.dataset.index
      const { secondCateList, tagCodes, activeParam, activeIndex } = this.data
      const index = tagCodes.indexOf(code)
      console.log('code', code);
      console.log('tagCodes', tagCodes);
      if(index === -1){
        // åŒparam里code重复
        if(activeParam && activeParam.length > 0){
          activeParam.forEach(item => {
            const indexTemp = tagCodes.indexOf(item.labelValueCode)
            if(indexTemp > -1){
              tagCodes.splice(indexTemp, 1)
            }
          })
        }
        tagCodes.push(code)
        secondCateList[activeIndex].paramIndex = paramIndex
        secondCateList[activeIndex].paramName = activeParam[paramIndex].labelValueName
      }else{
        tagCodes.splice(index, 1)
        secondCateList[activeIndex].paramIndex = -1
        secondCateList[activeIndex].paramName = ''
      }
      this.setData({ pageNum: 1,datalist: [],total: 0})
      this.setData({ tagCodes, secondCateList })
    },
    changeTwo(){
      const showTwo = !this.data.showTwo
      this.setData({showTwo})
      this.setData({showOne: false})
    changeShowParams(e){
      const { secondCateList } = this.data
      const activeIndex = e.currentTarget.dataset.index
      console.log('activeIndex', activeIndex);
      console.log('secondCateList', secondCateList);
      if(activeIndex === this.data.activeIndex){
        this.setData({ activeIndex: -1, activeParam: [] })
      }else{
        this.setData({
          activeIndex,
          activeParam: secondCateList[activeIndex].valueVos
        })
      }
      console.log('activeParam', this.data.activeParam);
      // this.setData({showTwo: false})
    },
    cancelParam() {
      const { secondCateList } = this.data
      secondCateList.forEach(item => {
        item.paramIndex = -1
        item.paramName = ''
      })
      this.setData({ tagCodes: [],activeParam: [],cateList,activeIndex: -1 })
    },
    subParam() {
      this.setData({ activeParam: [] })
      this.setData({ pageNum: 1,datalist: [],total: 0})
      this.getList()
    },
  }
})
wechat_jiaxuan/components/disProduct/index.less
@@ -1,4 +1,6 @@
.search_wrap{
.search_wrap {
  width: 670rpx;
  height: 72rpx;
  margin: 24rpx auto;
@@ -8,25 +10,38 @@
  display: flex;
  align-items: center;
  background-color: #F7F7F7;
  image{
  image {
    width: 28rpx;
    margin-right: 16rpx;
  }
}
.app{
.app {
  height: 100%;
  width: 100%;
  .home_content{
    height: 100%;
  }
}
.main_content{
.home_top {
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content {
  display: flex;
  height: calc( 100% - 120rpx );
  .main_left{
  padding-top: 120rpx;
  height: 100%;
  .main_left {
    width: 160rpx;
    height: 100%;
    overflow-y: auto;
    border-radius: 0rpx 16rpx 16rpx 0rpx;
    .item{
    .item {
      width: 160rpx;
      height: 100rpx;
      background: #F7F7F7;
@@ -37,40 +52,47 @@
      justify-content: center;
      align-items: center;
    }
    .active{
    .active {
      background-color: #fff;
      font-weight: 500;
      font-size: 30rpx;
      color: #111111;
    }
  }
  .main_right{
  .main_right {
    flex: 1;
    position: relative;
    .query_wrap{
    height: 100%;
    .query_wrap {
      display: flex;
      .item{
      .item {
        height: 100rpx;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #666666;
        color: #666666;
        flex: 1;
        .name{
        .name {
          margin-right: 12rpx;
        }
      }
    }
    .query_form{
    .query_form {
      position: absolute;
      z-index: 99;
      background-color: #fff;
      .list{
      .list {
        width: 100%;
        display: flex;
        flex-wrap: wrap;
        padding: 30rpx 40rpx;
        .item{
        .item {
          width: 154rpx;
          height: 72rpx;
          text-align: center;
@@ -84,18 +106,22 @@
          text-overflow: ellipsis;
          margin-right: 24rpx;
          margin-bottom: 24rpx;
          &:nth-of-type(3n){
          &:nth-of-type(3n) {
            margin-right: 0;
          }
        }
        .active{
        .active {
          color: var(--themeColor);
          background: rgba(176,135,113,0.08);
          background: rgba(176, 135, 113, 0.08);
        }
      }
      .btns{
      .btns {
        display: flex;
        .btn{
        .btn {
          width: 296rpx;
          height: 88rpx;
          background: #E5E5E5;
@@ -104,45 +130,54 @@
          justify-content: center;
          align-items: center;
        }
        .sub{
        .sub {
          background: var(--themeColor);
          color: #fff;
        }
      }
    }
    .status{
    .status {
      display: flex;
      padding: 0rpx 40rpx;
      margin: 20rpx 0;
      align-items: center;
      .active{
      height: 92rpx;
      .active {
        color: var(--themeColor);
      }
      .separate{
      .separate {
        margin: 0 12rpx;
        width: 1rpx;
        height: 28rpx;
        background-color: #333333;
      }
    }
    .goods_list{
    .goods_list {
      height: calc( 100% -  182rpx);
      width: 590rpx;
      display: flex;
      flex-wrap: wrap;
      box-sizing: border-box;
      justify-content: space-between;
      padding: 12rpx 40rpx;
      .item{
        width: 50%;
      .item {
        width: 242rpx;
        flex-shrink: 0;
        margin-bottom: 32rpx;
        .img_wrap{
        .img_wrap {
          width: 242rpx;
          border-radius: 8rpx;
          overflow: hidden;
          position: relative;
          .img{
          .img {
            width: 100%;
          }
          .new{
          .new {
            width: 72rpx;
            position: absolute;
            left: 0;
@@ -150,25 +185,30 @@
            z-index: 10;
          }
        }
        .name{
        .name {
          margin: 12rpx 0 8rpx;
          display: -webkit-box;//将盒子转换为弹性盒子
          -webkit-box-orient: vertical;//文本显示方式,默认水平
          -webkit-line-clamp: 1;//设置显示多少行
          display: -webkit-box; //将盒子转换为弹性盒子
          -webkit-box-orient: vertical; //文本显示方式,默认水平
          -webkit-line-clamp: 1; //设置显示多少行
          overflow: hidden;
        }
        .info{
        .info {
          display: flex;
          align-items: center;
          color: #666666;
          .icon{
          .icon {
            width: 28rpx;
            margin-right: 8rpx;
          }
          .num{
          .num {
            margin-right: 16rpx;
          }
          .primary{
          .primary {
            color: var(--themeColor);
          }
        }
wechat_jiaxuan/components/disProduct/index.wxml
@@ -1,74 +1,60 @@
<view class="app">
  <view class="search_wrap">
    <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
    <input bindblur="bindblur" model:value="{{ search }}" type="text" placeholder="搜索产品名称" />
  </view>
  <view class="main_content">
    <view class="main_left">
      <view data-code="{{item.code}}" bindtap="cateClick" wx:for="{{cateList}}" class="item {{ catalogCode == item.code ? 'active' : '' }}">{{ item.name }}</view>
  <view class="home_top" style="top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px">
    <view class="search_wrap">
      <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
      <input bindblur="bindblur" model:value="{{ query }}" type="text" placeholder="搜索产品名称" />
    </view>
    <view class="main_right">
      <view class="query_wrap">
        <view class="item" bindtap="changeOne">
          <view class="name">装修风格</view>
          <van-icon name="{{ showOne ? 'arrow-up' : 'arrow-down' }}" />
        </view>
        <view class="item" bindtap="changeTwo">
          <view class="name">空间名称</view>
          <van-icon name="{{ showTwo ? 'arrow-up' : 'arrow-down' }}" />
        </view>
      </view>
      <view wx:if="{{ showOne }}" class="query_form">
        <view class="list">
          <view class="item active">东芝电视</view>
          <view class="item">东芝啊的时撒的代电视</view>
          <view class="item">东芝电视</view>
          <view class="item">东芝电视</view>
          <view class="item">东芝电视</view>
        </view>
        <view class="btns">
          <view class="btn" bindtap="changeOne">取消</view>
          <view class="btn sub">确认</view>
        </view>
      </view>
      <view wx:if="{{ showTwo }}" class="query_form">
        <view class="list">
          <view class="item active">宜家</view>
          <view class="item">宜家</view>
          <view class="item">宜家</view>
          <view class="item">宜家</view>
          <view class="item">宜家</view>
        </view>
        <view class="btns">
          <view class="btn" bindtap="changeTwo">取消</view>
          <view class="btn sub">确认</view>
        </view>
      </view>
      <view class="status">
        <view class="item {{ sortType == 'NORMAL' ? 'active' : '' }}" data-status="NORMAL" bindtap="statusChange">默认</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'HOT' ? 'active' : '' }}" data-status="HOT" bindtap="statusChange">最热</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'LATEST' ? 'active' : '' }}" data-status="LATEST" bindtap="statusChange">最新</view>
      </view>
      <view class="goods_list">
        <view wx:for="{{ datalist }}" data-id="{{item.id}}" class="item" bindtap="handleDetail">
          <view class="img_wrap">
            <image src="{{ item.coverImage }}" class="img" mode="widthFix"></image>
            <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
          </view>
          <view class="name">{{ item.title }}</view>
          <view class="info">
            <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">{{ item.favoriteCount     }}</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>{{ item.readCount }}</text>
  </view>
  <view class="home_content" style="padding-top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px;">
    <view class="main_content">
      <scroll-view class="main_left" enable-flex scroll-y>
        <!-- <view class="main_left"> -->
          <view data-code="{{item.code}}" bindtap="cateClick" wx:for="{{cateList}}" class="item {{ catalogCode == item.code ? 'active' : '' }}">{{ item.name }}</view>
        <!-- </view> -->
      </scroll-view>
      <view class="main_right">
        <view class="query_wrap">
          <view data-index="{{index}}" wx:for="{{ secondCateList }}" class="item" bindtap="changeShowParams">
            <view class="name">{{ item.paramName || item.labelName }}</view>
            <van-icon name="{{ index == activeIndex ? 'arrow-up' : 'arrow-down' }}" />
          </view>
        </view>
        <view wx:if="{{ activeParam.length > 0 }}" class="query_form">
          <view class="list">
            <view data-index="{{index}}" data-code="{{ item.labelValueCode }}" bindtap="tagClick" wx:for="{{ activeParam }}" class="item {{ secondCateList[activeIndex].paramIndex === index ? 'active' : '' }}">{{ item.labelValueName }}</view>
          </view>
          <view class="btns">
            <view class="btn" bindtap="cancelParam">取消</view>
            <view class="btn sub" bindtap="subParam">确认</view>
          </view>
        </view>
        <view class="status">
          <view class="item {{ sortType == 'NORMAL' ? 'active' : '' }}" data-status="NORMAL" bindtap="statusChange">默认</view>
          <view class="separate"></view>
          <view class="item {{ sortType == 'HOT' ? 'active' : '' }}" data-status="HOT" bindtap="statusChange">最热</view>
          <view class="separate"></view>
          <view class="item {{ sortType == 'LATEST' ? 'active' : '' }}" data-status="LATEST" bindtap="statusChange">最新</view>
        </view>
        <scroll-view bindscrolltolower="scrolltolower" scroll-y    enable-passive enable-flex class="goods_list">
            <view wx:for="{{ datalist }}" data-id="{{item.id}}" class="item" bindtap="handleDetail">
              <view class="img_wrap">
                <image src="{{ item.coverImage }}" class="img" mode="widthFix"></image>
                <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
              </view>
              <view class="name">{{ item.title }}</view>
              <view class="info">
                <image wx:if="{{ !item.isCollection }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
                <image wx:else class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
                <text class="num {{item.isCollection ? 'primary' : ''}}">{{ item.collectCount || 0 }}</text>
                <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
                <text>{{ item.viewCount || 0 }}</text>
              </view>
            </view>
        </scroll-view>
      </view>
    </view>
  </view>
</view>
wechat_jiaxuan/components/disProduct/index.wxss
@@ -17,14 +17,23 @@
  height: 100%;
  width: 100%;
}
.app .home_content {
  height: 100%;
}
.home_top {
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content {
  display: flex;
  height: calc(100% - 120rpx);
  padding-top: 120rpx;
  height: 100%;
}
.main_content .main_left {
  width: 160rpx;
  height: 100%;
  overflow-y: auto;
  border-radius: 0rpx 16rpx 16rpx 0rpx;
}
.main_content .main_left .item {
@@ -47,6 +56,7 @@
.main_content .main_right {
  flex: 1;
  position: relative;
  height: 100%;
}
.main_content .main_right .query_wrap {
  display: flex;
@@ -114,8 +124,8 @@
.main_content .main_right .status {
  display: flex;
  padding: 0rpx 40rpx;
  margin: 20rpx 0;
  align-items: center;
  height: 92rpx;
}
.main_content .main_right .status .active {
  color: var(--themeColor);
@@ -127,13 +137,16 @@
  background-color: #333333;
}
.main_content .main_right .goods_list {
  height: calc(100% - 182rpx);
  width: 590rpx;
  display: flex;
  flex-wrap: wrap;
  box-sizing: border-box;
  justify-content: space-between;
  padding: 12rpx 40rpx;
}
.main_content .main_right .goods_list .item {
  width: 50%;
  width: 242rpx;
  flex-shrink: 0;
  margin-bottom: 32rpx;
}
wechat_jiaxuan/components/disRealpic/index.js
@@ -1,24 +1,176 @@
// components/disCase/index.js
import { getCataLogTagList, getZhongTaiRealcasePage, actionDo } from '../../api/index'
Component({
  /**
   * ç»„件的属性列表
   */
  properties: {
    menuButtonInfo: Object
  },
  data: {
    showParams: false,
    activeStatus: '0'
    activeIndex: -1,
    activeParam: [],
    selParam: '',
    tagCodes: [],
    cateList: [],
    dataList: [],
    pageNum: 1,
    pageSize: 10,
    query: '',
    sortType: 'NORMAL',
    catalogCode: 'real_case'
  },
  attached() {
    this.getCatelist()
  },
  methods: {
    handleDetail(e) {
      wx.navigateTo({
        url: '/pages/detailDis/realpic',
    getCatelist(){
      const { catalogCode } = this.data
      getCataLogTagList({
        catalogCode
      }).then(res => {
        if(res.data && res.data.length > 0){
          this.setData({
            cateList: res.data
          })
          setTimeout(() => {
            this.getList()
          }, 300)
        }
      })
    },
    changeShowParams(){
      const showParams = !this.data.showParams
      this.setData({showParams})
    getList() {
      const { sortType, query, tagCodes, pageNum, pageSize,catalogCode } = this.data
      getZhongTaiRealcasePage({
        catalogCode,tagCodes,pageNum,pageSize, sortType,query
      }).then(res => {
        this.setData({
          dataList: [...this.data.dataList, ...res.data.records],
          total: res.data.total,
        })
      })
    },
    scrolltolower() {
      console.log('触底事件');
      const { total, dataList, pageNum } = this.data
      if(total > dataList.length){
        this.setData({ pageNum: pageNum + 1 })
        this.getList()
      }else{
        wx.showToast({
          title: '暂无更多数据',
          icon: 'none'
        })
      }
    },
    videoClick(e) {
      const { videourl } = e.currentTarget.dataset
      wx.previewMedia({
        sources: [{ url: videourl, type: 'video' }]
      })
    },
    priviewFull(e){
      const item = e.currentTarget.dataset.item
      console.log('item', item);
      wx.navigateTo({
        url: '/pages/webView/index?link=' + item.openContent,
        success: function(res) {
          // é€šè¿‡eventChannel向被打开页面传送数据
          res.eventChannel.emit('acceptDataFromOpenerPage', { link: item.openContent, title: item.title })
        }
      })
    },
    statusChange(e) {
      const sortType = e.currentTarget.dataset.status
      this.setData({sortType})
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.getList()
    },
    handleAction(e){
      const actionType = e.currentTarget.dataset.code
      const id = e.currentTarget.dataset.id
      actionDo({
        actionType,
        id
      }).then(res => {
        this.getList()
      })
    },
    handleDetail(e) {
      const item = e.currentTarget.dataset.item
      console.log('item', item);
      if(item.openType == 'video'){
        wx.previewMedia({
          sources: [{ url: item.openContent, type: 'video' }]
        })
      }
      if(item.openType == 'link'){
        wx.navigateTo({
          url: '/pages/webView/index?link=' + item.openContent,
        })
      }
      if(item.openType == 'page'){
        wx.navigateTo({
          url: '/pages/detailDis/realpic?id=' + item.id,
        })
      }
    },
    tagClick(e) {
      const code = e.currentTarget.dataset.code
      const paramIndex = e.currentTarget.dataset.index
      const { cateList, tagCodes, activeParam, activeIndex } = this.data
      const index = tagCodes.indexOf(code)
      if(index === -1){
        if(activeParam && activeParam.length > 0){
          activeParam.forEach(item => {
            const indexTemp = tagCodes.indexOf(item.labelValueCode)
            if(indexTemp > -1){
              tagCodes.splice(indexTemp, 1)
            }
          })
        }
        tagCodes.push(code)
        cateList[activeIndex].paramIndex = paramIndex
        cateList[activeIndex].paramName = activeParam[paramIndex].labelValueName
      }else{
        tagCodes.splice(index, 1)
        cateList[activeIndex].paramIndex = -1
        cateList[activeIndex].paramName = ''
      }
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.setData({ tagCodes, cateList })
      console.log('tagCodes', tagCodes);
    },
    cancelParam() {
      const { cateList } = this.data
      cateList.forEach(item => {
        item.paramIndex = -1
        item.paramName = ''
      })
      this.setData({ tagCodes: [],activeParam: [],cateList,activeIndex: -1 })
    },
    bindblur() {
      this.getList()
    },
    subParam() {
      this.setData({ activeParam: [] })
      this.setData({ pageNum: 1,dataList: [],total: 0})
      this.getList()
    },
    changeShowParams(e){
      const { cateList } = this.data
      const activeIndex = e.currentTarget.dataset.index
      if(activeIndex === this.data.activeIndex){
        this.setData({ activeIndex: -1, activeParam: [], selParam: '' })
      }else{
        this.setData({
          activeIndex,
          activeParam: cateList[activeIndex].valueVos
        })
      }
      // this.setData({showTwo: false})
    },
    changeTwo(){
@@ -26,9 +178,5 @@
      this.setData({showTwo})
      this.setData({showOne: false})
    },
    statusChange(e) {
      const activeStatus = e.currentTarget.dataset.status
      this.setData({activeStatus})
    }
  }
})
wechat_jiaxuan/components/disRealpic/index.less
@@ -18,35 +18,55 @@
.app {
  height: 100%;
  width: 100%;
  .home_content{
    height: 100%;
  }
}
.home_top{
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content{
  height: 100%;
  padding-top: 120rpx;
.main_content {
  height: calc(100% - 120rpx);
  .query_wrap_scroll {
    width: 750rpx;
    padding: 0 40rpx;
  }
  .query_wrap {
    display: flex;
    padding: 0 16rpx;
    .item {
      margin-right: 36rpx;
      height: 88rpx;
      display: flex;
      flex-shrink: 0;
      align-items: center;
      justify-content: center;
      color: #666666;
      flex: 1;
      .name {
        margin-right: 6rpx;
      }
    }
  }
  .query_param {
    position: absolute;
    z-index: 99;
    background-color: #fff;
    width: 100%;
    .list {
      width: 100%;
      display: flex;
      flex-wrap: wrap;
      padding: 30rpx 40rpx;
      .item {
        width: 202rpx;
        height: 72rpx;
@@ -66,13 +86,16 @@
          margin-right: 0;
        }
      }
      .active {
        color: var(--themeColor);
        background: rgba(176, 135, 113, 0.08);
      }
    }
    .btns {
      display: flex;
      .btn {
        flex: 1;
        height: 88rpx;
@@ -93,9 +116,8 @@
  .status {
    display: flex;
    padding: 0rpx 40rpx;
    margin: 20rpx 0;
    height: 100rpx;
    align-items: center;
    .active {
      color: var(--themeColor);
    }
@@ -107,59 +129,98 @@
      background-color: #333333;
    }
  }
  .goods_list{
  .goods_list {
    padding: 12rpx 40rpx;
    height: calc( 100% - 188rpx);
    box-sizing: border-box;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    .item{
    justify-content: space-around;
    .item {
      width: 324rpx;
      margin-bottom: 60rpx;
      .img_wrap{
      margin-bottom: 32rpx;
      .img_wrap {
        width: 100%;
        height: 182rpx;
        border-radius: 8rpx;
        overflow: hidden;
        position: relative;
        .img{
        .play {
          width: 60rpx;
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
          z-index: 1;
        }
        .full {
          position: absolute;
          top: 32rpx;
          right: 32rpx;
          font-size: 20rpx;
          color: rgba(255, 255, 255, 0.8);
          width: 112rpx;
          height: 42rpx;
          background: rgba(0, 0, 0, 0.54);
          border-radius: 30rpx;
          display: flex;
          align-items: center;
          justify-content: center;
          .icon {
            width: 24rpx;
            margin-right: 4rpx;
          }
        }
        .img {
          width: 100%;
          height: 100%;
        }
        .tag{
          padding: 0 10rpx;
          height: 46rpx;
          line-height: 46rpx;
          text-align: center;
          background: rgba(0,0,0,0.4);
          border-radius: 8rpx;
        .new {
          width: 72rpx;
          position: absolute;
          left: 12rpx;
          top: 16rpx;
          color: #fff;
          font-size: 24rpx;
          left: 0;
          top: 0;
          z-index: 10;
        }
      }
      .name{
      .content {
        display: flex;
        justify-content: space-between;
        padding: 0 10rpx;
      }
      .name {
        margin: 12rpx 0 8rpx;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        flex: 1;
      }
      .info{
      .info {
        display: flex;
        align-items: center;
        color: #666666;
        margin-left: 12rpx;
        .icon{
        .icon {
          width: 28rpx;
          margin-right: 8rpx;
        }
        .num{
        .num {
          margin-right: 28rpx;
        }
        .primary{
        .primary {
          color: var(--themeColor);
        }
      }
wechat_jiaxuan/components/disRealpic/index.wxml
@@ -1,119 +1,65 @@
<view class="app">
  <view class="search_wrap">
    <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
    <input type="text" placeholder="搜索产品名称" />
  <view class="home_top" style="top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px">
    <view class="search_wrap">
      <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
      <input bindblur="bindblur" model:value="{{ query }}" type="text" placeholder="搜索实景名称" />
    </view>
  </view>
  <!--  -->
  <view class="main_content">
    <view class="query_wrap">
      <view class="item" bindtap="changeShowParams">
        <view class="name">风格</view>
        <van-icon name="{{ showParams ? 'arrow-up' : 'arrow-down' }}" />
      </view>
      <view class="item" bindtap="changeShowParams">
        <view class="name">空间</view>
        <van-icon name="{{ showParams ? 'arrow-up' : 'arrow-down' }}" />
      </view>
      <view class="item" bindtap="changeShowParams">
        <view class="name">间名</view>
        <van-icon name="{{ showParams ? 'arrow-up' : 'arrow-down' }}" />
      </view>
      <view class="item" bindtap="changeShowParams">
        <view class="name">间称</view>
        <van-icon name="{{ showParams ? 'arrow-up' : 'arrow-down' }}" />
      </view>
      <view class="item" bindtap="changeShowParams">
        <view class="name">空称</view>
        <van-icon name="{{ showParams ? 'arrow-up' : 'arrow-down' }}" />
      </view>
    </view>
    <view wx:if="{{ showParams }}" class="query_param">
      <view class="list">
        <view class="item active">东芝电视</view>
        <view class="item">东芝啊的时撒的代电视</view>
        <view class="item">东芝电视</view>
        <view class="item">东芝电视</view>
        <view class="item">东芝电视</view>
      </view>
      <view class="btns">
        <view class="btn" bindtap="changeShowParams">取消</view>
        <view class="btn sub">确认</view>
      </view>
    </view>
    <view class="status">
      <view class="item {{ activeStatus == '0' ? 'active' : '' }}" data-status="0" bindtap="statusChange">默认</view>
      <view class="separate"></view>
      <view class="item {{ activeStatus == '1' ? 'active' : '' }}" data-status="1" bindtap="statusChange">最热</view>
      <view class="separate"></view>
      <view class="item {{ activeStatus == '2' ? 'active' : '' }}" data-status="2" bindtap="statusChange">最新</view>
    </view>
    <!-- goods_list -->
    <view class="goods_list">
      <view class="item" bindtap="handleDetail">
        <view class="img_wrap">
          <image src="../../static/icon/test.png" class="img"></image>
          <view class="tag">实拍</view>
        </view>
        <view class="content">
          <view class="name">钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲</view>
          <view class="info">
            <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">34</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>1000</text>
  <view class="home_content" style="padding-top:{{ menuButtonInfo.top + menuButtonInfo.height + 6 }}px;">
    <view class="main_content">
      <scroll-view class="query_wrap_scroll" scroll-x>
        <view class="query_wrap">
          <view data-index="{{ index }}" wx:for="{{ cateList }}" class="item" bindtap="changeShowParams">
            <view class="name">{{ item.paramName || item.labelName }}</view>
            <van-icon name="{{ activeIndex === index ? 'arrow-up' : 'arrow-down' }}" />
          </view>
        </view>
      </view>
      <view class="item">
        <view class="img_wrap">
          <image src="../../static/icon/test.png" class="img"></image>
          <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </scroll-view>
      <!--  param -->
      <view wx:if="{{ activeParam && activeParam.length > 0 }}" class="query_param">
        <view class="list">
          <view data-index="{{index}}" data-code="{{ item.labelValueCode }}" bindtap="tagClick" wx:for="{{ activeParam }}" class="item {{ cateList[activeIndex].paramIndex === index ? 'active' : '' }}">{{ item.labelValueName }}</view>
        </view>
        <view class="content">
          <view class="name">钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲</view>
        <view class="btns">
          <view class="btn" bindtap="cancelParam">取消</view>
          <view bindtap="subParam" class="btn sub">确认</view>
        </view>
      </view>
      <view class="status">
        <view class="item {{ sortType == 'NORMAL' ? 'active' : '' }}" data-status="NORMAL" bindtap="statusChange">默认</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'HOT' ? 'active' : '' }}" data-status="HOT" bindtap="statusChange">最热</view>
        <view class="separate"></view>
        <view class="item {{ sortType == 'LATEST' ? 'active' : '' }}" data-status="LATEST" bindtap="statusChange">最新</view>
      </view>
      <!-- goods_list -->
      <scroll-view bindscrolltolower="scrolltolower" scroll-y enable-passive enable-flex class="goods_list">
        <view wx:for="{{ dataList }}" data-item="{{item}}" class="item" bindtap="handleDetail">
          <view class="img_wrap">
            <image src="{{ item.coverImage }}" class="img"></image>
            <view wx:if="{{ item.openType == 'link' }}" data-item="{{item}}" bindtap="priviewFull" class="full">
              <image class="icon" src="../../static/icon/ic_720.png" mode="widthFix"></image>
              <text>全景</text>
            </view>
            <image wx:if="{{ item.openType == 'video' }}" bindtap="videoClick" data-videourl="{{ item.openContent }}" class="play" src="../../static/icon/ic_play.png" mode="widthFix"></image>
            <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
          </view>
          <view class="content">
            <view class="name">{{ item.title }}</view>
          </view>
          <view class="info">
            <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">34</text>
            <image wx:if="{{ !item.collection }}" data-code="like" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else data-code="like_cancel" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{item.collection ? 'primary' : ''}}">{{ item.collectCount }}</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>1000</text>
            <text>{{ item.viewCount }}</text>
          </view>
        </view>
      </view>
      <view class="item">
        <view class="img_wrap">
          <image src="../../static/icon/test.png" class="img"></image>
          <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
        </view>
        <view class="content">
          <view class="name">钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲</view>
          <view class="info">
            <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">34</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>1000</text>
          </view>
        </view>
      </view>
      <view class="item">
        <view class="img_wrap">
          <image src="../../static/icon/test.png" class="img"></image>
          <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
        </view>
        <view class="content">
          <view class="name">钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲钢琴曲</view>
          <view class="info">
            <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
            <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
            <text class="num {{true ? 'primary' : ''}}">34</text>
            <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
            <text>1000</text>
          </view>
        </view>
      </view>
      </scroll-view>
    </view>
  </view>
</view>
wechat_jiaxuan/components/disRealpic/index.wxss
@@ -17,20 +17,34 @@
  height: 100%;
  width: 100%;
}
.app .home_content {
  height: 100%;
}
.home_top {
  position: fixed;
  z-index: 9999;
  width: 100%;
  background-color: #fff;
}
.main_content {
  height: calc(100% - 120rpx);
  height: 100%;
  padding-top: 120rpx;
}
.main_content .query_wrap_scroll {
  width: 750rpx;
  padding: 0 40rpx;
}
.main_content .query_wrap {
  display: flex;
  padding: 0 16rpx;
}
.main_content .query_wrap .item {
  margin-right: 36rpx;
  height: 88rpx;
  display: flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  color: #666666;
  flex: 1;
}
.main_content .query_wrap .item .name {
  margin-right: 6rpx;
@@ -88,7 +102,7 @@
.main_content .status {
  display: flex;
  padding: 0rpx 40rpx;
  margin: 20rpx 0;
  height: 100rpx;
  align-items: center;
}
.main_content .status .active {
@@ -102,13 +116,15 @@
}
.main_content .goods_list {
  padding: 12rpx 40rpx;
  height: calc(100% - 188rpx);
  box-sizing: border-box;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  justify-content: space-around;
}
.main_content .goods_list .item {
  width: 324rpx;
  margin-bottom: 60rpx;
  margin-bottom: 32rpx;
}
.main_content .goods_list .item .img_wrap {
  width: 100%;
@@ -117,24 +133,48 @@
  overflow: hidden;
  position: relative;
}
.main_content .goods_list .item .img_wrap .play {
  width: 60rpx;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 1;
}
.main_content .goods_list .item .img_wrap .full {
  position: absolute;
  top: 32rpx;
  right: 32rpx;
  font-size: 20rpx;
  color: rgba(255, 255, 255, 0.8);
  width: 112rpx;
  height: 42rpx;
  background: rgba(0, 0, 0, 0.54);
  border-radius: 30rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}
.main_content .goods_list .item .img_wrap .full .icon {
  width: 24rpx;
  margin-right: 4rpx;
}
.main_content .goods_list .item .img_wrap .img {
  width: 100%;
  height: 100%;
}
.main_content .goods_list .item .img_wrap .tag {
  padding: 0 10rpx;
  height: 46rpx;
  line-height: 46rpx;
  text-align: center;
  background: rgba(0, 0, 0, 0.4);
  border-radius: 8rpx;
.main_content .goods_list .item .img_wrap .new {
  width: 72rpx;
  position: absolute;
  left: 12rpx;
  top: 16rpx;
  color: #fff;
  font-size: 24rpx;
  left: 0;
  top: 0;
  z-index: 10;
}
.main_content .goods_list .item .content {
  display: flex;
  justify-content: space-between;
  padding: 0 10rpx;
}
.main_content .goods_list .item .name {
  margin: 12rpx 0 8rpx;
  white-space: nowrap;
wechat_jiaxuan/pages/consult/consult.js
@@ -1,4 +1,4 @@
import { getZhongTaiProductNewsPage, getCatalogList } from '../../api/index'
import { getZhongTaiProductNewsPage, getCatalogList,actionDo } from '../../api/index'
Page({
  /**
@@ -6,50 +6,108 @@
   */
  data: {
    category: [],
    secondCategory: ['级分类','级分类','级分类','级分类','级分类','级分类'],
    activeCate: '',
    seActiveCate: '',
    secondCategory: [],
    catalogCode: '',
    tagCode: '',
    query: '',
    dataList: [],
    total: 0,
    pageNum: 1,
    pageSize: 10,
    // height: 0,
    // top: 0,
  },
  onLoad(options) {
    this.getCate()
    this.getList()
  },
  onReachBottom() {
    console.log('触底事件');
    const { total, dataList, pageNum } = this.data
    if(total > dataList.length){
      this.setData({ pageNum: pageNum + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  getCate() {
    getCatalogList({catalogCode: 'product_info'}).then(res => {
      this.setData({ category: res.data })
      if(res.data && res.data.length > 0){
        this.setData({catalogCode: res.data[0].code})
        this.gettag()
        this.getList()
      }
    })
  },
  gettag() {
    const { catalogCode } = this.data
    getCatalogList({
      catalogCode
    }).then(res => {
      if(res.data && res.data.length > 0){
        this.setData({ secondCategory: res.data })
      }
    })
  },
  itemClick(e) {
    const { id } = e.currentTarget.dataset
    wx.navigateTo({
      url: '/pages/consult/detail?id='+id,
    })
    const item = e.currentTarget.dataset.item
    actionDo({actionType: 'view',id: item.id})
    if(item.contentType == 'link'){
      wx.navigateTo({
        url: '/pages/webView/index?link=' + item.content,
        success: function(res) {
          // é€šè¿‡eventChannel向被打开页面传送数据
          res.eventChannel.emit('acceptDataFromOpenerPage', { link: item.openContent, title: item.title })
        }
      })
    }else{
      wx.navigateTo({
        url: '/pages/consult/detail?id='+item.id,
      })
    }
  },
  getList() {
    const { pageNum, pageSize, activeCate } = this.data
    const { pageNum, pageSize, catalogCode, tagCode, query } = this.data
    getZhongTaiProductNewsPage({
      pageNum, pageSize, catalogCode: activeCate
      pageNum, pageSize, query, catalogCode: tagCode || catalogCode
    }).then(res => {
      if(res.data){
        this.setData({ dataList: res.data.records,total: res.data.records.total })
        this.setData({
          dataList: [ ...this.data.dataList, ...res.data.records ],
          total: res.data.total
        })
      }
      
    })
  },
  cateClick(e) {
    const { code } = e.currentTarget.dataset
    this.setData({ activeCate: code })
    this.setData({ catalogCode: code,secondCategory: [], tagCode: ''  })
    this.gettag()
    this.getList()
    this.setData({ dataList: [], pageNum: 1 })
  },
  seCateClick(e) {
    const { index } = e.currentTarget.dataset
    console.log(index);
    const { code } = e.currentTarget.dataset
    if(this.data.tagCode == code){
      this.setData({ tagCode: '' })
    }else{
      this.setData({ tagCode: code })
    }
    this.setData({ dataList: [], pageNum: 1 })
    this.getList()
  },
  priviewFull(e){
      const item = e.currentTarget.dataset.item
      console.log('item', item);
    },
  onReady() {
  },
@@ -74,21 +132,6 @@
  onUnload() {
  },
  /**
   * é¡µé¢ç›¸å…³äº‹ä»¶å¤„理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
   */
wechat_jiaxuan/pages/consult/consult.less
@@ -1,11 +1,33 @@
.container {
  background-color: #fff;
}
.home_top{
  position: fixed;
  width: 100%;
  z-index: 99;
  top: 0;
  background-color: #fff;
}
.cate_wrap{
  background-color: #fff;
  .cate_one{
    position: fixed;
    top: 96rpx;
    background-color: #fff;
    width: 100%;
  }
  .cate_two{
    position: fixed;
    top: 156rpx;
    background-color: #fff;
    padding-top: 30rpx;
    width: 100%;
  }
}
.search_wrap{
  width: 670rpx;
  height: 72rpx;
  margin: 0rpx auto 24rpx;
  background: #F7F7F7;
  border-radius: 8rpx;
  padding: 0 40rpx;
  display: flex;
@@ -54,7 +76,7 @@
  }
}
.content{
  padding: 0 40rpx 40rpx;
  padding: 260rpx 40rpx 40rpx;
  .item{
    margin-bottom: 60rpx;
    .img{
wechat_jiaxuan/pages/consult/consult.wxml
@@ -1,24 +1,30 @@
<view class="container">
  <view class="search_wrap">
    <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
    <input type="text" placeholder="搜索咨询标题" />
  <view class="home_top">
    <view class="search_wrap">
      <image src="../../static/icon/ic_search@2x.png" mode="widthFix"></image>
      <input bindblur="getList" model:value="{{ query }}" type="text" placeholder="搜索资讯标题" />
    </view>
  </view>
  <!-- åˆ†ç±» -->
  <view>
    <scroll-view scroll-x="true" style="weight: 710rpx;margin-bottom: 30rpx;">
      <view class="scroll_cate">
        <view bindtap="cateClick" data-code="{{item.code}}" wx:for="{{ category }}" class="item {{ activeCate == item.code ? 'active': '' }}">{{ item.name }}</view>
      </view>
    </scroll-view>
    <scroll-view scroll-x="true" style="weight: 710rpx;margin-bottom: 28rpx;">
      <view class="scroll_cate second_list">
        <view bindtap="seCateClick" data-index="{{index}}" wx:for="{{ secondCategory }}" class="item {{ index == 0 ? 'active': '' }}">{{ index }}{{ item }}</view>
      </view>
    </scroll-view>
  <view class="cate_wrap">
    <view class="cate_one">
      <scroll-view scroll-x="true" style="weight: 710rpx;margin-bottom: 30rpx;">
        <view class="scroll_cate">
          <view bindtap="cateClick" data-code="{{item.code}}" wx:for="{{ category }}" class="item {{ catalogCode == item.code ? 'active': '' }}">{{ item.name }}</view>
        </view>
      </scroll-view>
    </view>
    <view class="cate_two">
      <scroll-view scroll-x="true" style="weight: 710rpx;margin-bottom: 24rpx;">
        <view class="scroll_cate second_list">
          <view bindtap="seCateClick" data-code="{{item.code}}" wx:for="{{ secondCategory }}" class="item {{ tagCode == item.code ? 'active': '' }}">{{ item.name }}</view>
        </view>
      </scroll-view>
    </view>
  </view>
  <!-- content -->
  <view class="content">
    <view wx:for="{{ dataList }}" class="item" bindtap="itemClick" data-id="{{item.id}}">
  <view class="content" style="padding-top: {{ secondCategory.length > 0 ? 276 : 186 }}rpx;">
    <view wx:for="{{ dataList }}" class="item" bindtap="itemClick" data-item="{{item}}">
      <image class="img" src="{{ item.coverImage }}" mode="widthFix"></image>
      <view class="title">{{ item.title }}</view>
      <view class="df_sb static">
wechat_jiaxuan/pages/consult/consult.wxss
@@ -1,11 +1,33 @@
.container {
  background-color: #fff;
}
.home_top {
  position: fixed;
  width: 100%;
  z-index: 99;
  top: 0;
  background-color: #fff;
}
.cate_wrap {
  background-color: #fff;
}
.cate_wrap .cate_one {
  position: fixed;
  top: 96rpx;
  background-color: #fff;
  width: 100%;
}
.cate_wrap .cate_two {
  position: fixed;
  top: 156rpx;
  background-color: #fff;
  padding-top: 30rpx;
  width: 100%;
}
.search_wrap {
  width: 670rpx;
  height: 72rpx;
  margin: 0rpx auto 24rpx;
  background: #F7F7F7;
  border-radius: 8rpx;
  padding: 0 40rpx;
  display: flex;
@@ -50,7 +72,7 @@
  font-weight: 400;
}
.content {
  padding: 0 40rpx 40rpx;
  padding: 260rpx 40rpx 40rpx;
}
.content .item {
  margin-bottom: 60rpx;
wechat_jiaxuan/pages/consult/detail.js
@@ -7,6 +7,7 @@
  data: {
    bottomLift: 0,
    info: {},
    detail: {},
    showShare: false
  },
@@ -23,7 +24,10 @@
  },
  getDetail(id) {
    getProductNewsInfo({ id }).then(res => {
      this.setData({ detail: res.data })
      this.setData({ info: res.data })
      wx.setNavigationBarTitle({
        title: res.data.title
      })
    })
  },
  openShare() {
wechat_jiaxuan/pages/consult/detail.json
@@ -1,6 +1,7 @@
{
  "usingComponents": {
    "van-popup": "@vant/weapp/popup/index"
    "van-popup": "@vant/weapp/popup/index",
    "mp-html": "mp-html"
  },
  "navigationBarTitleText": "详情"
  "navigationBarTitleText": ""
}
wechat_jiaxuan/pages/consult/detail.wxml
@@ -1,13 +1,12 @@
<view>
  <!-- <navBar title="{{ navTitle }}"></navBar> -->
  <view class="main_content">
    <view class="main_title">三种美好玄关,进屋瞬间卸载疲惫</view>
    <view class="datetime">发布时间:2021-08-21 10:0</view>
    <view class="content">
      å®¢åŽ…ã€é¤åŽ…ã€å§å®¤ã€åŽ¨æˆ¿ã€é˜³å°â€¦â€¦å®¶ä¸­ç©ºé—´çš„ç§°è°“ï¼Œå¤§å¤šæœ´å®žæ— åŽï¼Œå”¯ç‹¬â€œçŽ„å…³â€ä¸€è¯æ ¼å¤–åŽä¸½æŠ½è±¡ã€‚
      è¿™ä¸ªä¸å¤ªèµ·çœ¼çš„小空间,取词来自道教:“玄关”指修炼内丹过程中,体内的气绕巡全身时,最先通过的地方,也有“夫玄关者,至玄至妙之机关也”的说法。
    </view>
    <view class="main_title">{{ info.title }}</view>
    <view class="datetime">发布时间:{{ info.publishDt }}</view>
    <mp-html content="{{info.content}}"></mp-html>
  </view>
  <!-- footer -->
  <view class="footer" style="padding-bottom: {{bottomLift}}px;">
    <view class="btns">
wechat_jiaxuan/pages/design/design.js
@@ -11,10 +11,15 @@
  data: {
    name: '',
    phone: '',
    city: '',
    showAreaList: false,
    areaList: [],
    addr: {},
    fieldNames: {
      text: 'name',
      value: 'id',
      children: 'children',
    },
    cascaderValue: '',
    DESIGN_BANNER: '',
@@ -27,7 +32,8 @@
  onSubmit() {
    const {
      name,
      phone
      phone,
      addr
    } = this.data
    if (!name) return wx.showToast({
      title: '请输入姓名',
@@ -37,39 +43,65 @@
      title: '请输入联系电话',
      icon: 'none'
    })
    if (phone.length !== 11) return wx.showToast({
      title: '请输入正确的联系电话',
      icon: 'none'
    })
    if (!addr.areaCode || !addr.cityCode) return wx.showToast({
      title: '请选择城市',
      icon: 'none'
    })
    saveFreeCustomizationApply({
      name,
      phone
      phone,
      ...addr
    }).then(res => {
      wx.showToast({
        title: '报名成功'
      })
      wx.switchTab({
        url: '/pages/index/index',
      })
    })
  },
  // æ˜¾ç¤ºåˆ‡æ¢åŸŽå¸‚弹窗
  // æ˜¾ç¤ºåŸŽå¸‚弹窗
  chooseCity () {
    this.setData({ showAreaList: !this.data.showAreaList })
    console.log('chooseCity', chooseCity);
    console.log('chooseCity', this.data.showAreaList);
  },
  // åˆ‡æ¢åŸŽå¸‚
  confirmChange(e) {
    let {
      values
    } = e.detail
    let region = []
    for (let i in values) {
      region.push(values[i].name)
  onFinish(e) {
    const { selectedOptions, value } = e.detail;
    const addr = {
      provinceCode: selectedOptions[0].id,
      provinceName: selectedOptions[0].name,
      cityCode: selectedOptions[1].id,
      cityName: selectedOptions[1].name,
      areaCode: selectedOptions[2].id,
      areaName: selectedOptions[2].name,
    }
    this.setData({
      region,
      cityCode: values[1].code
    })
    this.getShopList()
    this.chooseCity()
    this.setData({ addr, showAreaList: false })
    console.log('selectedOptions', addr);
  },
  onFinish() {
  positionChange (e) {
    console.log(e.detail.value)
    const names = e.detail.value
    const codes = e.detail.code
    let addr = {
      provinceCode: codes[0] + '00',
      provinceName: names[0],
      cityCode: codes[1] + '00',
      cityName: names[1],
      areaCode: codes[2] + '00',
      areaName: names[2],
    }
    this.setData({ addr })
  },
  bindRegionChange(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    const temp = e.detail.value
    this.setData({
      region: e.detail.value
    })
  },
  onClose() {
    this.setData({ showAreaList: false })
wechat_jiaxuan/pages/design/design.less
@@ -35,7 +35,13 @@
    border-radius: 8rpx;
    padding: 0 32rpx;
    margin-bottom: 40rpx;
    .city_picler{
      flex: 1;
      padding-left: 30rpx;
      .placeholder9{
        color: #c8c9cc;
      }
    }
    .icon {
      width: 40rpx;
    }
wechat_jiaxuan/pages/design/design.wxml
@@ -10,14 +10,22 @@
      <image class="icon" src="../../static/icon/design_ic_phone.png" mode="widthFix"></image>
      <van-field type="number" class="input" custom-style="background-color: #F6F6F6;" model:value="{{ phone }}" placeholder="请输入联系电话" clearable maxlength="{{ 11 }}" />
    </view>
    <view class="line" bindtap="chooseCity">
    <view class="line">
      <image class="icon" src="../../static/icon/design_ic_city.png" mode="widthFix"></image>
      <view class="city">{{ city }}</view>
      <picker class="city_picler" mode="region" value="{{ addr }}" bindchange="bindRegionChange" bindchange="positionChange">
        <view class="placeholder9" hidden="{{ addr.cityName }}">请选择地址</view>
        <view class="picker" hidden="{{ !addr.cityName }}">
          {{ addr.provinceName }}{{ addr.cityName }}{{ addr.areaName }}
        </view>
      </picker>
      <image class="arrow_right" src="../../static/icon/arrow_right.png" mode="widthFix"></image>
    </view>
    <view class="btn" bindtap="onSubmit">立即报名</view>
  </view>
  <image class="banner" src="{{ WechatIMG558 }}" mode="widthFix"></image>
  <!--  -->
  <van-cascader wx:if="{{ showAreaList }}" value="{{ cascaderValue }}" title="请选择所在地区" options="{{ areaList }}" bind:close="onClose" bind:finish="onFinish" />
  <van-popup show="{{ showAreaList }}" bind:close="onClose" round position="bottom">
    <van-cascader field-names="{{ fieldNames }}" value="{{ cascaderValue }}" title="请选择所在地区" options="{{ areaList }}" bind:close="onClose" bind:finish="onFinish" />
  </van-popup>
</view>
wechat_jiaxuan/pages/design/design.wxss
@@ -34,6 +34,13 @@
  padding: 0 32rpx;
  margin-bottom: 40rpx;
}
.main_content .line .city_picler {
  flex: 1;
  padding-left: 30rpx;
}
.main_content .line .city_picler .placeholder9 {
  color: #c8c9cc;
}
.main_content .line .icon {
  width: 40rpx;
}
wechat_jiaxuan/pages/detailDis/case.js
@@ -1,4 +1,4 @@
import { shareContent } from '../../api/index'
import { actionDo, getWholecaseInfo } from '../../api/index'
Page({
  /**
@@ -17,14 +17,30 @@
    this.setData({
      bottomLift: app.bottomLift
    })
    this.getDetail(options.id)
    actionDo({
      actionType: 'view',
      id: options.id
    })
    const member = wx.getStorageSync('member')
    this.setData({id: options.id, member})
  },
  priviewFull(){
    let { panorama: link, title } = this.data.info
    wx.navigateTo({
      url: '/pages/webView/index',
      success: function(res) {
        // é€šè¿‡eventChannel向被打开页面传送数据
        res.eventChannel.emit('acceptDataFromOpenerPage', { link, title })
      }
    })
  },
  openShare() {
    this.setData({showShare: true})
  },
  handleShare() {
    console.log('点击了分享');
    shareContent(this.data.info.id)
    actionDo({ actionType: 'share', id: this.data.info.id })
  },
  // onShareAppMessage: function () {
  //   // let { productDetail, userInfo } = this.data
@@ -33,6 +49,38 @@
  //     path: '/pages/index/index?id=' + productDetail.id + '&shareuserid=' + userInfo.id + '&type=0'
  //   }
  // },
  handleAction(e){
    const actionType = e.currentTarget.dataset.code
    const { info } = this.data
    actionDo({
      actionType,
      id: this.data.info.id
    }).then(res => {
      info.collection = !info.collection
      this.setData({info})
      wx.showToast({
        title: actionType == 'collect' ? '收藏成功' : '取消收藏',
      })
    })
  },
  getDetail(id) {
    getWholecaseInfo({id}).then(res => {
      this.setData({ info: res.data })
      wx.setNavigationBarTitle({
        title: res.data.title
     })
    })
  },
  handleDesign() {
    wx.navigateTo({
      url: '/pages/design/design',
    })
  },
  playVideo() {
    wx.previewMedia({
      sources: [{ url: this.data.info.video, type: 'video' }]
    })
  },
  onClose() {
    this.setData({showShare: false})
  },
wechat_jiaxuan/pages/detailDis/case.json
@@ -1,6 +1,7 @@
{
  "usingComponents": {
    "van-popup": "@vant/weapp/popup/index"
    "van-popup": "@vant/weapp/popup/index",
    "mp-html": "mp-html"
  },
  "navigationBarTitleText": ""
}
wechat_jiaxuan/pages/detailDis/case.less
@@ -15,9 +15,28 @@
  }
  .fullview_wrap {
    position: relative;
    .banner {
      width: 100%;
      border-radius: 8rpx;
    }
    .full{
      position: absolute;
      top: 32rpx;
      right: 32rpx;
      font-size: 20rpx;
      color: rgba(255,255,255,0.8);
      width: 112rpx;
      height: 42rpx;
      background: rgba(0,0,0,0.54);
      border-radius: 30rpx;
      display: flex;
      align-items: center;
      justify-content: center;
      .icon{
        width: 24rpx;
        margin-right: 4rpx;
      }
    }
  }
@@ -50,10 +69,14 @@
  .list{
    .item{
      .content{
        margin-top: 20rpx;
        font-weight: 300;
        font-size: 28rpx;
        color: #333333;
      }
      .img{
        width: 100%;
      }
    }
  }
wechat_jiaxuan/pages/detailDis/case.wxml
@@ -1,44 +1,39 @@
<view class="container">
  <view class="main_title">简欧风格70m²两居室</view>
  <view class="time">发布时间:2021-08-21 10:0</view>
  <view class="main_title">{{ info.title }}</view>
  <view class="time">发布时间:{{ info.publishDt }}</view>
  <view class="fullview_wrap">
    <image class="banner" src="../../static/icon/test.png" mode="widthFix"></image>
    <view bindtap="priviewFull" wx:if="{{ info.panorama }}" class="full">
      <image class="icon" src="../../static/icon/ic_720.png" mode="widthFix"></image>
      <text>全景</text>
    </view>
    <image class="banner" src="{{ info.coverImage }}" mode="widthFix"></image>
  </view>
  <view class="h1">布置图</view>
  <image class="img" src="../../static/icon/test.png"  mode="widthFix"></image>
  <image class="img" src="{{ info.layoutUlr }}"  mode="widthFix"></image>
  <view class="analysis">
    <view class="h2">案例解析</view>
    <view class="text">为保留入户的储纳空间,将卫生间的门移动一段距离,方便了入户贵的设置,储物间封闭做主卧衣帽间,增加空间使用率和房屋整体性。客厅的格局设计增加了空间的层次感。</view>
    <view class="text">{{ info.caseInfo }}</view>
  </view>
  <view class="list">
    <view class="item">
      <view class="h1">01.客厅</view>
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    </view>
    <view class="item">
      <view class="h1">01.客厅</view>
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    </view>
    <view class="item">
      <view class="h1">01.客厅</view>
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    <view wx:for="{{ info.apiSpaceCaseVos }}" class="item">
      <view class="h1">{{ item.spaceName }}</view>
      <image class="img" wx:for="{{ item.imgList }}" wx:for-item="img" src="{{ img }}" mode="widthFix" />
      <view class="content">{{ item.spaceDesc }}</view>
    </view>
  </view>
  <!-- footer -->
  <view class="footer" style="padding-bottom: {{bottomLift}}px;">
    <view class="btns">
      <view class="item">
        <image class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
      <button class="item btn">
        <image data-code="collect_cancel" bindtap="handleAction" wx:if="{{ info.collection }}" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <image wx:else data-code="collect" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <view class="name">收藏</view>
      </view>
      <view class="item" bindtap="openShare">
      </button>
      <button open-type="share" class="item btn" bindtap="handleShare">
        <image class="icon" src="../../static/icon/detail_nav_share.png" mode="widthFix"></image>
        <view class="name">分享</view>
      </view>
      <view class="sub_btn">
      </button>
      <view class="sub_btn" bindtap="handleDesign">
        <image class="sheji" src="../../static/icon/ic_sheji.png" mode="widthFix"></image>
        <view>免费预约专属设计</view>
      </view>
wechat_jiaxuan/pages/detailDis/case.wxss
@@ -12,9 +12,30 @@
  color: #999999;
  margin-bottom: 48rpx;
}
.container .fullview_wrap {
  position: relative;
}
.container .fullview_wrap .banner {
  width: 100%;
  border-radius: 8rpx;
}
.container .fullview_wrap .full {
  position: absolute;
  top: 32rpx;
  right: 32rpx;
  font-size: 20rpx;
  color: rgba(255, 255, 255, 0.8);
  width: 112rpx;
  height: 42rpx;
  background: rgba(0, 0, 0, 0.54);
  border-radius: 30rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}
.container .fullview_wrap .full .icon {
  width: 24rpx;
  margin-right: 4rpx;
}
.container .img {
  width: 100%;
@@ -41,10 +62,14 @@
  color: #333333;
}
.container .list .item .content {
  margin-top: 20rpx;
  font-weight: 300;
  font-size: 28rpx;
  color: #333333;
}
.container .list .item .img {
  width: 100%;
}
.spaceList .item {
  margin-bottom: 60rpx;
}
wechat_jiaxuan/pages/detailDis/product.js
@@ -1,4 +1,8 @@
import { shareContent, getProductInfo, actionDo } from '../../api/index'
import {
  shareContent,
  getProductInfo,
  actionDo
} from '../../api/index'
Page({
  /**
@@ -26,34 +30,54 @@
      id: options.id
    })
    const member = wx.getStorageSync('member')
    this.setData({id: options.id, member})
    this.setData({
      id: options.id,
      member
    })
  },
  handleAction(e){
  handleAction(e) {
    const actionType = e.currentTarget.dataset.code
    const { info } = this.data
    const {
      info
    } = this.data
    actionDo({
      actionType,
      id: this.data.info.id
    }).then(res => {
      info.isCollection = info.isCollection || info.isCollection == 'true' ? 'false' : 'true'
      this.setData({info})
      info.collection = !info.collection
      this.setData({
        info
      })
      wx.showToast({
        title: actionType == 'collect' ? '收藏成功' : '取消收藏',
      })
    })
  },
  getDetail(id) {
    getProductInfo({id}).then(res => {
      this.setData({ info: res.data })
    getProductInfo({
      id
    }).then(res => {
      this.setData({
        info: res.data
      })
      wx.setNavigationBarTitle({
        title: res.data.title
     })
      })
    })
  },
  playVideo() {
    wx.previewMedia({
      sources: [{ url: this.data.info.video, type: 'video' }]
      sources: [{
        url: this.data.info.video,
        type: 'video'
      }]
    })
  },
  bannerbindload(e) {
    const { height, width } = e.detail
    const {
      height,
      width
    } = e.detail
    let activeHeight = height * 670 / width
    this.setData({
      bannerHeight: activeHeight
@@ -65,11 +89,16 @@
    })
  },
  openShare() {
    this.setData({showShare: true})
    this.setData({
      showShare: true
    })
  },
  handleShare() {
    console.log('点击了分享');
    actionDo({ actionType: 'share', id: this.data.info.id })
    actionDo({
      actionType: 'share',
      id: this.data.info.id
    })
    // shareContent({id: this.data.info.id || this.data.id}).then(res => {
    //   this.setData({showShare: false})
    // })
@@ -82,10 +111,14 @@
  //   }
  // },
  onClose() {
    this.setData({showShare: false})
    this.setData({
      showShare: false
    })
  },
  handleDown() {
    let { info } = this.data
    let {
      info
    } = this.data
    wx.showToast({
      title: '下载中',
      icon: 'loading'
@@ -93,7 +126,7 @@
    console.log('info.picUrls', info)
    wx.downloadFile({
      url: info.picUrls,
      success (res) {
      success(res) {
        // console.log(res)
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
@@ -112,7 +145,7 @@
          }
        })
      },
      fail (err) {
      fail(err) {
        console.log(err.errMsg)
        wx.showToast({
          title: '下载失败',
wechat_jiaxuan/pages/detailDis/product.wxml
@@ -51,8 +51,8 @@
  <view class="footer" style="padding-bottom: {{bottomLift}}px;">
    <view class="btns">
      <button class="item btn">
        <image data-code="like_cancel" bindtap="handleAction" wx:if="{{ info.isCollection }}" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <image wx:else data-code="like" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image data-code="collect_cancel" bindtap="handleAction" wx:if="{{ info.collection }}" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <image wx:else data-code="collect" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <view class="name">收藏</view>
      </button>
      <button open-type="share" class="item btn" bindtap="handleShare">
wechat_jiaxuan/pages/detailDis/realpic.js
@@ -1,4 +1,4 @@
import { shareContent } from '../../api/index'
import { getRealcaseInfo, actionDo } from '../../api/index'
Page({
  /**
@@ -6,6 +6,9 @@
   */
  data: {
    bottomLift: 0,
    id: '',
    info: {},
    member: {},
    showShare: false
  },
@@ -17,13 +20,62 @@
    this.setData({
      bottomLift: app.bottomLift
    })
    this.getDetail(options.id)
    actionDo({
      actionType: 'view',
      id: options.id
    })
    const member = wx.getStorageSync('member')
    this.setData({id: options.id, member})
  },
  handleAction(e){
    const actionType = e.currentTarget.dataset.code
    const { info } = this.data
    actionDo({
      actionType,
      id: this.data.info.id
    }).then(res => {
      info.collection = !info.collection
      wx.showToast({
        title: actionType == 'collect' ? '收藏成功' : '取消收藏',
      })
      this.setData({info})
    })
  },
  getDetail(id) {
    getRealcaseInfo({id}).then(res => {
      this.setData({ info: res.data })
      wx.setNavigationBarTitle({
        title: res.data.title
     })
    })
  },
  playVideo() {
    wx.previewMedia({
      sources: [{ url: this.data.info.video, type: 'video' }]
    })
  },
  bannerbindload(e) {
    const { height, width } = e.detail
    let activeHeight = height * 670 / width
    this.setData({
      bannerHeight: activeHeight
    })
  },
  handleDesign() {
    wx.navigateTo({
      url: '/pages/design/design',
    })
  },
  openShare() {
    this.setData({showShare: true})
  },
  handleShare() {
    console.log('点击了分享');
    shareContent(this.data.info.id)
    actionDo({ actionType: 'share', id: this.data.info.id })
    // shareContent({id: this.data.info.id || this.data.id}).then(res => {
    //   this.setData({showShare: false})
    // })
  },
  // onShareAppMessage: function () {
  //   // let { productDetail, userInfo } = this.data
@@ -35,31 +87,52 @@
  onClose() {
    this.setData({showShare: false})
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面隐藏
   */
  handleDown() {
    let { info } = this.data
    wx.showToast({
      title: '下载中',
      icon: 'loading'
    })
    console.log('info.picUrls', info)
    wx.downloadFile({
      url: info.picUrls,
      success (res) {
        // console.log(res)
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success(data) {
            that.toSaveCaseShare()
            wx.showToast({
              title: '下载成功',
            })
          },
          fail(error) {
            console.log(error)
            wx.showToast({
              title: '下载失败',
              icon: 'error'
            })
          }
        })
      },
      fail (err) {
        console.log(err.errMsg)
        wx.showToast({
          title: '下载失败',
          icon: 'error'
        })
      }
    })
  },
  onHide() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面卸载
   */
  onUnload() {
  },
  /**
   * é¡µé¢ç›¸å…³äº‹ä»¶å¤„理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
wechat_jiaxuan/pages/detailDis/realpic.less
@@ -1,6 +1,8 @@
.container {
  padding: 0 40rpx 220rpx;
  .info_item{
    width: 100%;
  }
  .main_title {
    font-weight: 500;
    font-size: 44rpx;
wechat_jiaxuan/pages/detailDis/realpic.wxml
@@ -1,32 +1,27 @@
<view class="container">
  <view class="main_title">简欧风格70m²两居室</view>
  <view class="time">发布时间:2021-08-21 10:0</view>
  <view class="list">
  <view class="main_title">{{ info.title }}</view>
  <view class="time">发布时间:{{ info.publishDt }}</view>
  <image class="info_item" wx:for="{{ info.contentImgList }}" src="{{ item }}" mode="widthFix"></image>
  <view>{{ info.contentText || '' }}</view>
  <!-- <view class="list">
    <view class="item">
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    </view>
    <view class="item">
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    </view>
    <view class="item">
      <image src="" mode="widthFix" />
      <view class="content">看惯了整齐划一的玻璃吊柜,金色框型玻门吊柜又是不一样的审美,边框微斜切入,左右对称分布,灯光映衬下,美味绚丽多姿</view>
    </view>
  </view>
  </view> -->
  <!-- footer -->
  <view class="footer" style="padding-bottom: {{bottomLift}}px;">
    <view class="btns">
      <view class="item">
        <image class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
      <button class="item btn">
        <image data-code="collect_cancel" bindtap="handleAction" wx:if="{{ info.collection }}" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <image wx:else data-code="collect" bindtap="handleAction" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <view class="name">收藏</view>
      </view>
      <view class="item" bindtap="openShare">
      </button>
      <button open-type="share" class="item btn" bindtap="handleShare">
        <image class="icon" src="../../static/icon/detail_nav_share.png" mode="widthFix"></image>
        <view class="name">分享</view>
      </view>
      <view class="sub_btn">
      </button>
      <view class="sub_btn" bindtap="handleDesign">
        <image class="sheji" src="../../static/icon/ic_sheji.png" mode="widthFix"></image>
        <view>免费预约专属设计</view>
      </view>
wechat_jiaxuan/pages/detailDis/realpic.wxss
@@ -1,6 +1,9 @@
.container {
  padding: 0 40rpx 220rpx;
}
.container .info_item {
  width: 100%;
}
.container .main_title {
  font-weight: 500;
  font-size: 44rpx;
wechat_jiaxuan/pages/discover/discover.js
@@ -6,7 +6,11 @@
   */
  data: {
    menuButtonInfo: {},
    catalogCode: "whole_case"
    catalogCode: "product_intro",
    activeCate: '',
    height: 0,
    top: 0,
  },
  onLoad(options) {
    let menuButtonInfo = wx.getMenuButtonBoundingClientRect();
wechat_jiaxuan/pages/discover/discover.less
@@ -1,8 +1,9 @@
.main_tab{
  position: relative;
  display: flex;
  align-items: flex-end;
  height: 88rpx;
  align-items: center;
  padding: 0 40rpx;
  // border: 1px solid red;
  .item{
    width: 76rpx;
    font-size: 32rpx;
@@ -24,7 +25,13 @@
    }
  }
}
.container{
.home_tab{
  position: fixed;
  z-index: 999;
  width: 100%;
  background-color: #fff;
}
.main_content{
}
// .main_content{
//   padding-top: 200rpx;
// }
wechat_jiaxuan/pages/discover/discover.wxml
@@ -1,23 +1,25 @@
<view class="container">
  <view style="height: {{ menuButtonInfo.top }}px;"></view>
  <view class="main_tab">
    <view class="item {{ catalogCode == 'product_intro' ? 'active' : '' }}" data-code="product_intro" bindtap="tabsClick">
      <view class="name">产品</view>
      <view class="border"></view>
    </view>
    <view class="item {{ catalogCode == 'whole_case' ? 'active' : '' }}" data-code="whole_case" bindtap="tabsClick">
      <view class="name">案例</view>
      <view class="border"></view>
    </view>
    <view class="item {{ catalogCode == 'real_case' ? 'active' : '' }}" data-code="real_case" bindtap="tabsClick">
      <view class="name">实景</view>
      <view class="border"></view>
  <view class="home_tab">
    <view style="height: {{ menuButtonInfo.top - 6 }}px;"></view>
    <view class="main_tab" style="height: {{ menuButtonInfo.height + 12 }}px;">
      <view class="item {{ catalogCode == 'product_intro' ? 'active' : '' }}" data-code="product_intro" bindtap="tabsClick">
        <view class="name">产品</view>
        <view class="border"></view>
      </view>
      <view class="item {{ catalogCode == 'whole_case' ? 'active' : '' }}" data-code="whole_case" bindtap="tabsClick">
        <view class="name">案例</view>
        <view class="border"></view>
      </view>
      <view class="item {{ catalogCode == 'real_case' ? 'active' : '' }}" data-code="real_case" bindtap="tabsClick">
        <view class="name">实景</view>
        <view class="border"></view>
      </view>
    </view>
  </view>
  <!--  -->
  <view class="main_content" style="height: calc( 100vh - {{menuButtonInfo.top}}px - 88rpx )">
    <disProduct wx:if="{{ catalogCode == 'product_intro' }}" />
    <disCase wx:if="{{ catalogCode == 'whole_case' }}" />
    <disRealpic wx:if="{{ catalogCode == 'real_case' }}" />
  <view class="main_content" style="height: 100vh">
    <disProduct menuButtonInfo="{{ menuButtonInfo }}" wx:if="{{ catalogCode == 'product_intro' }}" />
    <disCase menuButtonInfo="{{ menuButtonInfo }}" wx:if="{{ catalogCode == 'whole_case' }}" />
    <disRealpic menuButtonInfo="{{ menuButtonInfo }}" wx:if="{{ catalogCode == 'real_case' }}" />
  </view>
</view>
wechat_jiaxuan/pages/discover/discover.wxss
@@ -1,7 +1,7 @@
.main_tab {
  position: relative;
  display: flex;
  align-items: flex-end;
  height: 88rpx;
  align-items: center;
  padding: 0 40rpx;
}
.main_tab .item {
@@ -23,3 +23,9 @@
.main_tab .active .border {
  background: linear-gradient(270deg, rgba(255, 255, 255, 0.56) 0%, rgba(206, 144, 111, 0.88) 100%);
}
.home_tab {
  position: fixed;
  z-index: 999;
  width: 100%;
  background-color: #fff;
}
wechat_jiaxuan/pages/homeId/index.js
@@ -1,4 +1,4 @@
import { getCataLogTagList, pageZSZXContentList } from '../../api/index'
import { getCataLogTagList, pageZSZXContentList, actionDo } from '../../api/index'
Page({
  /**
@@ -8,6 +8,7 @@
    tagList: [],
    activeCate: '',
    dataList: [],
    total: 0,
    pageNum: 1,
    pageSize: 10,
@@ -22,12 +23,53 @@
    this.getTabList()
    this.getList()
  },
  itemClick(e) {
    const { id } = e.target.dataset
    console.log(e.target.dataset);
    wx.navigateTo({
      url: '/pages/consult/detail',
  onReachBottom() {
    console.log('触底事件');
    const { total, dataList, pageNum } = this.data
    if(total > dataList.length){
      this.setData({ pageNum: pageNum + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  getList(){
    const { code, tagCodes, pageSize, pageNum } = this.data
    pageZSZXContentList({
      catalogCode: code,
      tagCodes: tagCodes ? [tagCodes] : [],
      pageSize,
      pageNum
    }).then(res => {
      this.setData({
        total: res.data.total,
        dataList: [ ...this.data.dataList, ...res.data.records ]
      })
    })
  },
  itemClick(e) {
    const item = e.currentTarget.dataset.item
    console.log('item', item);
    actionDo({actionType: 'view',id: item.id})
    if(item.contentType == 'video'){
      wx.previewMedia({
        sources: [{ url: item.content, type: 'video' }]
      })
    }
    if(item.contentType == 'link'){
      wx.navigateTo({
        url: '/pages/webView/index?link=' + item.content,
      })
    }
    if(item.contentType == 'page'){
      getApp().globalData.catalogCode=item.content
      wx.switchTab({
        url: '/pages/discover/discover'
      })
    }
  },
  cateClick(e) {
    const { code } = e.target.dataset
@@ -49,22 +91,6 @@
      }
      
    })
  },
  getList(){
    const { code, tagCodes, pageSize, pageNum } = this.data
    pageZSZXContentList({
      catalogCode: code,
      tagCodes,
      pageSize,
      pageNum
    }).then(res => {
      this.setData({
        dataList: [ ...this.data.dataList, ...res.data.records ]
      })
    })
  },
  onReachBottom() {
  },
  onReady() {
@@ -101,9 +127,6 @@
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
wechat_jiaxuan/pages/homeId/index.less
@@ -1,6 +1,11 @@
.container {
  background-color: #fff;
}
.home_tabs{
  height: 80rpx;
  position: fixed;
  background-color: #fff;
}
.search_wrap{
  width: 670rpx;
  height: 72rpx;
@@ -54,7 +59,7 @@
  }
}
.content{
  padding: 0 40rpx 40rpx;
  padding: 80rpx 40rpx 40rpx;
  .item{
    margin-bottom: 60rpx;
    .img{
wechat_jiaxuan/pages/homeId/index.wxml
@@ -1,7 +1,7 @@
<view class="container">
  <!-- åˆ†ç±» -->
  <view>
  <view class="home_tabs">
    <scroll-view scroll-x="true" style="weight: 710rpx;margin-bottom: 30rpx;">
      <view class="scroll_cate">
        <view bindtap="cateClick" data-code="{{item.labelValueCode}}" wx:for="{{ tagList }}" class="item {{ tagCodes == item.labelValueCode ? 'active': '' }}">{{ item.labelValueName }}</view>
@@ -10,7 +10,7 @@
  </view>
  <!-- content -->
  <view class="content">
    <view wx:for="{{ dataList }}" class="item" bindtap="itemClick" data-abg="qwe">
    <view wx:for="{{ dataList }}" class="item" bindtap="itemClick" data-item="{{item}}">
      <image class="img" src="{{ item.coverImage }}" mode="widthFix"></image>
      <view class="title">{{ item.title }}</view>
      <view class="df_sb static">
wechat_jiaxuan/pages/homeId/index.wxss
@@ -1,6 +1,11 @@
.container {
  background-color: #fff;
}
.home_tabs {
  height: 80rpx;
  position: fixed;
  background-color: #fff;
}
.search_wrap {
  width: 670rpx;
  height: 72rpx;
@@ -50,7 +55,7 @@
  font-weight: 400;
}
.content {
  padding: 0 40rpx 40rpx;
  padding: 80rpx 40rpx 40rpx;
}
.content .item {
  margin-bottom: 60rpx;
wechat_jiaxuan/pages/index/index.js
@@ -4,7 +4,7 @@
  getZSZXCatalogs,
  getCustomizedNewsList,
  getHomeBanner,
  getHomeBannerDetail,
  actionDo,
  getZhongTaiVideoPage,
  getZhongTaiProductNewsPage
} from '../../api/index'
@@ -59,14 +59,14 @@
  },
  changePath(e) {
    let index = e.currentTarget.dataset.type
    let that = this
    switch (index) {
      case '0':
        wx.navigateTo({
          url: '/pages/webView/index',
          success: function (res) {
            // é€šè¿‡eventChannel向被打开页面传送数据
            res.eventChannel.emit('acceptDataFromOpenerPage', { link: this.data.testUrl })
            // saveBehavior({ type: 1 })
            res.eventChannel.emit('acceptDataFromOpenerPage', { link: that.data.testUrl })
          }
        })
        break;
@@ -120,7 +120,7 @@
    // èµ„讯
    getZhongTaiProductNewsPage({
      catalogCode: 'product_info',
      pageSize: 5, pageNum: 1
      pageSize: 6, pageNum: 1
    }).then(res => {
      if(res.data){
        this.setData({ consultList: res.data.records })
@@ -193,7 +193,26 @@
  },
  bannerClick(e) {
    const { id } = e.currentTarget.dataset
    getHomeBannerDetail({id})
    const item = e.currentTarget.dataset.item
    console.log('item', item);
    actionDo({actionType: 'view',id: item.id})
    if(item.openType == 'video'){
      wx.previewMedia({
        sources: [{ url: item.openContent, type: 'video' }]
      })
    }
    if(item.openType == 'link'){
      wx.navigateTo({
        url: '/pages/webView/index?link=' + item.openContent,
      })
    }
    if(item.openType == 'page'){
      getApp().globalData.catalogCode=item.openContent
      wx.switchTab({
        url: '/pages/discover/discover'
      })
    }
    // getHomeBannerDetail({id})
  },
  seriveClick(e) {
    const { id, title } = e.currentTarget.dataset
wechat_jiaxuan/pages/index/index.less
@@ -82,7 +82,7 @@
  // äº§å“è§†é¢‘
  .product_video {
    padding: 72rpx 40rpx;
    padding: 40rpx 40rpx;
    background-color: #fff;
    .video_wrap {
@@ -106,7 +106,7 @@
  }
  .strategy {
    padding: 80rpx 40rpx;
    padding: 40rpx 40rpx;
    background: #F7F7F7;
    .item {
@@ -158,7 +158,7 @@
  // å’¨è¯¢
  .consult {
    padding: 80rpx 40rpx 60rpx;
    padding: 40rpx 40rpx 60rpx;
    background: #fff;
  }
@@ -176,15 +176,14 @@
    .left {
      font-weight: 600;
      font-size: 36rpx;
      font-size: 34rpx;
      color: #111111;
      line-height: 50rpx;
      line-height: 34rpx;
      flex: 1;
      .name {
        display: flex;
        align-items: center;
        margin-bottom: 10rpx;
        .icon {
          width: 36rpx;
          height: 36rpx;
@@ -206,6 +205,13 @@
  }
}
.auth{
  background-color: #fff;
}
.home_title{
  font-weight: 600;
  font-size: 38rpx;
}
.top-head-transparent {
  background-color: transparent !important;
wechat_jiaxuan/pages/index/index.wxml
@@ -2,7 +2,7 @@
<view class="container">
  <van-nav-bar wx:if="{{ showWhiteHead }}" border="{{ topHeadBorder }}" custom-class="top-head" fixed custom-style="opacity: {{ topHeadStyle }}">
    <view slot="left" class="flex-cc search">
      <text  style="color: {{font_color}};">志邦家选</text>
      <text class="home_title" style="color: {{font_color}};">志邦家选</text>
      <van-icon name="search" size="23px" color="#fff" />
      <!-- <image src="/static/icon/home_ic_search_black.png" mode="widthFix"></image> -->
      <!-- <text>搜索</text> -->
@@ -10,14 +10,14 @@
  </van-nav-bar>
  <van-nav-bar wx:else border="{{ topHeadBorder }}" custom-class="top-head-transparent" fixed>
    <view slot="left" class="flex-cc search">
      <text style="color: {{font_color}};">志邦家选</text>
      <text class="home_title" style="color: {{font_color}};">志邦家选</text>
    </view>
  </van-nav-bar>
  <!-- banner轮播 -->
  <swiper class="banner_swiper" circular indicator-dots="{{ bannerSwiperOption.indicatorDots }}" autoplay="{{ bannerSwiperOption.autoplay }}" interval="{{ bannerSwiperOption.interval }}" style="height:{{bannerImgHeight}}rpx" duration="{{ bannerSwiperOption.duration }}">
    <block wx:for="{{ bannerList }}" wx:key="index">
      <swiper-item>
        <image data-id="{{ item.id }}" bindtap="bannerClick" bindload="bannerbindload" mode="widthFix" src="{{ item.coverImage }}"></image>
        <image data-item="{{ item }}" data-id="{{ item.id }}" bindtap="bannerClick" bindload="bannerbindload" mode="widthFix" src="{{ item.coverImage }}"></image>
      </swiper-item>
    </block>
  </swiper>
@@ -40,7 +40,9 @@
    </view>
  </view>
  <!--  -->
  <authCard type="{{ member.authStatus }}" />
  <view class="auth">
    <authCard type="{{ member.authStatus }}" />
  </view>
  <!-- <authCard type="1" /> -->
  <!-- äº§å“è§†é¢‘  -->
  <view class="product_video">
@@ -71,9 +73,9 @@
      </view>
    </view>
    <view class="line">
      <view class="line_left item" data-item="{{ ZSZXCata.jdId }}" bindtap="changeStrategy">
      <view class="line_left item" data-item="{{ ZSZXCata.qwsj }}" bindtap="changeStrategy">
        <image src="{{HOME_CLASS_A}}"></image>
        <text>{{ ZSZXCata.jdId.name }}</text>
        <text>{{ ZSZXCata.qwsj.name }}</text>
      </view>
      <view class="line_right">
        <view class="item" data-item="{{ ZSZXCata.cfsj }}" bindtap="changeStrategy">
@@ -86,9 +88,9 @@
        </view>
      </view>
    </view>
    <view data-item="{{ ZSZXCata.qwsj.code }}" bindtap="changeStrategy" class="home_id item">
    <view data-item="{{ ZSZXCata.jdId }}" bindtap="changeStrategy" class="home_id item">
      <image src="{{HOME_CLASS_C}}"></image>
      <text>{{ ZSZXCata.qwsj.name }}</text>
      <text>{{ ZSZXCata.jdId.name }}</text>
    </view>
  </view>
  <!-- å’¨è¯¢ -->
@@ -107,6 +109,7 @@
    <block wx:for="{{ consultList }}" wx:key="index">
      <swiper-item>
        <image bindload="consultbindload"  mode="widthFix" src="{{ item.coverImage }}"></image>
      </swiper-item>
    </block>
  </swiper>
wechat_jiaxuan/pages/index/index.wxss
@@ -69,7 +69,7 @@
  color: #666666;
}
.container .product_video {
  padding: 72rpx 40rpx;
  padding: 40rpx 40rpx;
  background-color: #fff;
}
.container .product_video .video_wrap {
@@ -88,7 +88,7 @@
  width: 100%;
}
.container .strategy {
  padding: 80rpx 40rpx;
  padding: 40rpx 40rpx;
  background: #F7F7F7;
}
.container .strategy .item {
@@ -128,7 +128,7 @@
  margin-top: 24rpx;
}
.container .consult {
  padding: 80rpx 40rpx 60rpx;
  padding: 40rpx 40rpx 60rpx;
  background: #fff;
}
.container .service {
@@ -144,14 +144,15 @@
}
.container .com_header .left {
  font-weight: 600;
  font-size: 36rpx;
  font-size: 34rpx;
  color: #111111;
  line-height: 50rpx;
  line-height: 34rpx;
  flex: 1;
}
.container .com_header .left .name {
  display: flex;
  align-items: center;
  margin-bottom: 10rpx;
}
.container .com_header .left .name .icon {
  width: 36rpx;
@@ -167,6 +168,13 @@
  width: 44rpx;
  height: 44rpx;
}
.auth {
  background-color: #fff;
}
.home_title {
  font-weight: 600;
  font-size: 38rpx;
}
.top-head-transparent {
  background-color: transparent !important;
}
wechat_jiaxuan/pages/mine/mine.js
@@ -20,7 +20,8 @@
    const res = wx.getMenuButtonBoundingClientRect()
    this.setData({clientHeight: res.height})
    this.setData({clientTop: res.top})
  },
  onShow(){
    this.initData()
  },
  initData() {
@@ -71,13 +72,6 @@
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面显示
   */
  onShow() {
  },
wechat_jiaxuan/pages/mine/mine.less
@@ -59,6 +59,8 @@
  }
  .main_content{
    background-color: #fff;
    position: relative;
    z-index: 9999;
    border-radius: 16rpx 16rpx 0rpx 0rpx;
    padding: 40rpx;
    .func_list{
wechat_jiaxuan/pages/mine/mine.wxml
@@ -2,7 +2,7 @@
  <view class="navbar" style="padding-top: {{ clientTop }}px;height: {{clientHeight + clientTop}}px;">我的家</view>
  <image class="mine_bg" src="{{ MINE_BG }}" mode="widthFix"></image>
  <view class="userinfo">
    <image class="avatar" src="{{ imgurlFull ? imgurlFull : '../../static/images/default_avatar.png' }}"></image>
    <image class="avatar" src="{{ member.imgurl ? member.prefix + member.imgurl : '../../static/images/default_avatar.png' }}"></image>
    <view class="content">
      <view class="header">
        <view class="name">{{ member.nickname }}</view>
wechat_jiaxuan/pages/mine/mine.wxss
@@ -51,6 +51,8 @@
}
.container .main_content {
  background-color: #fff;
  position: relative;
  z-index: 9999;
  border-radius: 16rpx 16rpx 0rpx 0rpx;
  padding: 40rpx;
}
wechat_jiaxuan/pages/richText/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
import { getProductNewsInfo } from '../../api/index'
Page({
  /**
   * é¡µé¢çš„初始数据
   */
  data: {
    info: {}
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面加载
   */
  onLoad(options) {
    this.getDetail(options.id)
  },
  getDetail(id) {
    getProductNewsInfo({id}).then(res => {
      this.setData({ info: res.data })
    })
  },
  onReady() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面显示
   */
  onShow() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面隐藏
   */
  onHide() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面卸载
   */
  onUnload() {
  },
  /**
   * é¡µé¢ç›¸å…³äº‹ä»¶å¤„理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
   */
  onShareAppMessage() {
  }
})
wechat_jiaxuan/pages/richText/index.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
{
  "usingComponents": {},
  "mp-html": "mp-html"
}
wechat_jiaxuan/pages/richText/index.wxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<view>
  <mp-html content="{{info.content}}"></mp-html>
</view>
wechat_jiaxuan/pages/richText/index.wxss
wechat_jiaxuan/pages/store/info.wxml
@@ -14,7 +14,7 @@
      <view class="title">门店导购</view>
      <view class="list">
        <view class="item" data-id="{{ item.iamId }}" bindtap="handleDetail" wx:for="{{ info.usersList }}">
          <image src="{{ item.imgurlFull }}" class="avatar"></image>
          <image src="{{ item.imgurlFull ? item.imgurlFull : '../../static/images/default_avatar.png' }}" class="avatar"></image>
          <view class="content">
            <view class="name">{{ item.name }}</view>
            <view class="desc">导购|{{ info.jobDate || '-'}}年经验</view>
wechat_jiaxuan/pages/store/staff.js
@@ -6,7 +6,7 @@
   */
  data: {
    bottomLift: 0,
    isShow: false,
    isShow: true,
    info: {}
  },
wechat_jiaxuan/pages/store/staff.wxml
@@ -2,7 +2,7 @@
  <!-- <navBar></navBar> -->
  <image src="../../static/images/design_banner@2x.png" mode="widthFix" class="bg_wrap"></image>
  <view class="container">
    <image class="avatar" src="{{ info.imgurlFull }}"></image>
    <image class="avatar" src="{{ info.imgurlFull ? info.imgurlFull : '../../static/images/default_avatar.png' }}"></image>
    <view class="name_wrap">
      <view class="left">
        <view class="name">{{ info.name }}</view>
wechat_jiaxuan/pages/store/store.js
@@ -70,6 +70,12 @@
      url: `/pages/store/info?id=${id}`,
    })
  },
  userDetail(e) {
    const iamId =  e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/store/staff?id=${iamId}`,
    })
  },
  makePhone(e) {
    console.log('e', e);
    const phoneNumber = e.currentTarget.dataset.phone
wechat_jiaxuan/pages/store/store.less
@@ -56,19 +56,20 @@
        .left{
          flex: 1;
          .title{
            width: 520rpx;
            font-weight: 500;
            font-size: 32rpx; 
            width: 100%;
            white-space: nowrap;
            overflow: hidden;
            overflow: hidden;//文本超出隐藏
            text-overflow: ellipsis;
            margin-bottom: 16rpx;
          }
          .address{
            width: 520rpx;
            display: flex;
            align-items: center;
            white-space: nowrap;
            overflow: hidden;
            overflow: hidden;//文本超出隐藏
            text-overflow: ellipsis;
            font-size: 26rpx;
            color: #888888;
@@ -83,7 +84,7 @@
          font-size: 24rpx;
          color: #333333;
          text-align: center;
          margin-left: 80rpx;
          margin-left: 20rpx;
          .phone{
            width: 60rpx;
            margin-bottom: 4rpx;
wechat_jiaxuan/pages/store/store.wxml
@@ -27,7 +27,7 @@
        </view>
        <scroll-view scroll-x style="width: 640rpx">
          <view class="user_list">
            <view class="item" wx:for="{{ item.usersList }}" wx:for-item="user">
            <view bindtap="userDetail" data-id="{{ item.iamId }}" class="item" wx:for="{{ item.usersList }}" wx:for-item="user">
              <view class="info">
                <image class="avatar" src="{{ user.imgurlFull }}" mode="widthFix"></image>
                <view class="text">
wechat_jiaxuan/pages/store/store.wxss
@@ -54,15 +54,16 @@
  flex: 1;
}
.main_content .shops .shop .header .left .title {
  width: 520rpx;
  font-weight: 500;
  font-size: 32rpx;
  width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-bottom: 16rpx;
}
.main_content .shops .shop .header .left .address {
  width: 520rpx;
  display: flex;
  align-items: center;
  white-space: nowrap;
@@ -80,7 +81,7 @@
  font-size: 24rpx;
  color: #333333;
  text-align: center;
  margin-left: 80rpx;
  margin-left: 20rpx;
}
.main_content .shops .shop .header .right .phone {
  width: 60rpx;
wechat_jiaxuan/pages/userinfo/collect.js
@@ -1,24 +1,77 @@
// pages/userinfo/collect.js
import {
  collectLikePage
} from '../../api/index'
Page({
  /**
   * é¡µé¢çš„初始数据
   */
  data: {
    activeTabs: '0'
  },
    activeTabs: 'product_intro',
  tabsChange(e) {
    const activeTabs = e.currentTarget.dataset.val
    this.setData({ activeTabs })
  },
  handleDetail(e) {
    wx.navigateTo({
      url: '/pages/detailDis/product',
    })
    dataList: [],
    total: 0,
    pageNum: 1,
    pageSize: 10,
  },
  onLoad(options) {
    this.getList()
  },
  onReachBottom() {
    console.log('触底事件');
    const { total, dataList, pageNum } = this.data
    if(total > dataList.length){
      this.setData({ pageNum: pageNum + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  tabsChange(e) {
    const activeTabs = e.currentTarget.dataset.val
    this.setData({
      activeTabs,
      dataList: [],total: 0,pageNum: 1
    })
    this.getList()
  },
  handleDetail(e) {
    const id = e.currentTarget.dataset.id
    const { activeTabs } = this.data
    let url = ''
    if(activeTabs == 'product_intro'){
        url =  '/pages/detailDis/product'
    }else if(activeTabs == 'whole_case'){
      url =  '/pages/detailDis/case'
    }else{
      url =  '/pages/detailDis/realpic'
    }
    wx.navigateTo({
      url: `${url}?id=${id}`,
    })
  },
  getList() {
    const {
      pageSize,
      pageNum,
      activeTabs
    } = this.data
    collectLikePage({
      businessCategory: 'collect',
      businessType: activeTabs,
      pageSize,
      pageNum
    }).then(res => {
      if (res.data) {
        this.setData({
          dataList: [...this.data.dataList, ...res.data.records || []],
          total: res.data.total
        })
      }
    })
  },
  /**
@@ -59,9 +112,6 @@
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
wechat_jiaxuan/pages/userinfo/collect.wxml
@@ -1,59 +1,31 @@
<view class="container">
  <view class="tabs">
    <view class="item {{ activeTabs == '0' ? 'active' : '' }}" data-val="0" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'product_intro' ? 'active' : '' }}" data-val="product_intro" bindtap="tabsChange">
      <view class="name">产品</view>
      <view class="border"></view>
    </view>
    <view class="item {{ activeTabs == '1' ? 'active' : '' }}" data-val="1" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'whole_case' ? 'active' : '' }}" data-val="whole_case" bindtap="tabsChange">
      <view class="name">案例</view>
      <view class="border"></view>
    </view>
    <view class="item {{ activeTabs == '2' ? 'active' : '' }}" data-val="2" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'real_case' ? 'active' : '' }}" data-val="real_case" bindtap="tabsChange">
      <view class="name">实景</view>
      <view class="border"></view>
    </view>
  </view>
  <view class="list">
    <view class="item" bindtap="handleDetail">
    <view data-id="{{ item.id }}" wx:for="{{ dataList }}" class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
        <image src="{{ item.thumbnailUrl }}" class="img"></image>
        <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="name">{{ item.displayName }}</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">34</text>
        <image wx:else class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">{{ item.collectCount }}</text>
        <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
        <text>1000</text>
      </view>
    </view>
    <view class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">34</text>
        <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
        <text>1000</text>
      </view>
    </view>
    <view class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">34</text>
        <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
        <text>1000</text>
        <text>{{ item.viewCount }}</text>
      </view>
    </view>
  </view>
wechat_jiaxuan/pages/userinfo/favorite.js
@@ -1,24 +1,77 @@
// pages/userinfo/collect.js
import {
  collectLikePage
} from '../../api/index'
Page({
  /**
   * é¡µé¢çš„初始数据
   */
  data: {
    activeTabs: '0'
  },
    activeTabs: 'product_intro',
  tabsChange(e) {
    const activeTabs = e.currentTarget.dataset.val
    this.setData({ activeTabs })
  },
  handleDetail(e) {
    wx.navigateTo({
      url: '/pages/detailDis/product',
    })
    dataList: [],
    total: 0,
    pageNum: 1,
    pageSize: 10,
  },
  onLoad(options) {
    this.getList()
  },
  onReachBottom() {
    console.log('触底事件');
    const { total, dataList, pageNum } = this.data
    if(total > dataList.length){
      this.setData({ pageNum: pageNum + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  tabsChange(e) {
    const activeTabs = e.currentTarget.dataset.val
    this.setData({
      activeTabs,
      dataList: [],total: 0,pageNum: 1
    })
    this.getList()
  },
  handleDetail(e) {
    const id = e.currentTarget.dataset.id
    const { activeTabs } = this.data
    let url = ''
    if(activeTabs == 'product_intro'){
        url =  '/pages/detailDis/product'
    }else if(activeTabs == 'whole_case'){
      url =  '/pages/detailDis/case'
    }else{
      url =  '/pages/detailDis/realpic'
    }
    wx.navigateTo({
      url: `${url}?id=${id}`,
    })
  },
  getList() {
    const {
      pageSize,
      pageNum,
      activeTabs
    } = this.data
    collectLikePage({
      businessCategory: 'like',
      businessType: activeTabs,
      pageSize,
      pageNum
    }).then(res => {
      if (res.data) {
        this.setData({
          dataList: [...this.data.dataList, ...res.data.records || []],
          total: res.data.total
        })
      }
    })
  },
  /**
@@ -59,9 +112,6 @@
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
wechat_jiaxuan/pages/userinfo/favorite.wxml
@@ -1,53 +1,25 @@
<view class="container">
  <view class="tabs">
    <view class="item {{ activeTabs == '0' ? 'active' : '' }}" data-val="0" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'product_intro' ? 'active' : '' }}" data-val="product_intro" bindtap="tabsChange">
      <view class="name">产品</view>
      <view class="border"></view>
    </view>
    <view class="item {{ activeTabs == '1' ? 'active' : '' }}" data-val="1" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'whole_case' ? 'active' : '' }}" data-val="whole_case" bindtap="tabsChange">
      <view class="name">案例</view>
      <view class="border"></view>
    </view>
    <view class="item {{ activeTabs == '2' ? 'active' : '' }}" data-val="2" bindtap="tabsChange">
    <view class="item {{ activeTabs == 'real_case' ? 'active' : '' }}" data-val="real_case" bindtap="tabsChange">
      <view class="name">实景</view>
      <view class="border"></view>
    </view>
  </view>
  <view class="list">
    <view class="item" bindtap="handleDetail">
    <view data-id="{{ item.id }}" wx:for="{{ dataList }}" class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
        <image src="{{ item.thumbnailUrl }}" class="img"></image>
        <image wx:if="{{ false }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">34</text>
        <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
        <text>1000</text>
      </view>
    </view>
    <view class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
        <text class="num {{true ? 'primary' : ''}}">34</text>
        <image class="icon" src="../../static/icon/zixun_ic_liulan.png" mode="widthFix"></image>
        <text>1000</text>
      </view>
    </view>
    <view class="item" bindtap="handleDetail">
      <view class="img_wrap">
        <image src="../../static/icon/test.png" class="img"></image>
        <image wx:if="{{ true }}" class="new" src="../../static/icon/chanpin_ic_new@2x.png" mode="widthFix"></image>
      </view>
      <view class="name">钢琴曲</view>
      <view class="name">{{ item.displayName }}</view>
      <view class="info">
        <image wx:if="{{ false }}" class="icon" src="../../static/icon/detail_nav_collect.png" mode="widthFix"></image>
        <image wx:else="" class="icon" src="../../static/icon/detail_nav_collected.png" mode="widthFix"></image>
wechat_jiaxuan/pages/userinfo/index.js
@@ -1,7 +1,8 @@
import {
  uploadUrl,
  editMember,
  getMemberInfo
  getMemberInfo,
  getArea
} from '../../api/index'
Page({
@@ -19,8 +20,9 @@
    longitude: '',
    district: '',
    housearea: '',
    // åŸŽå¸‚。地址
    region: [],
    addr: {},
    areaData: [],
    showHouseType: false,
    houseType: {
@@ -45,13 +47,15 @@
      longitude,
      district,
      housearea,
      houseType
      houseType,
      addr
    } = this.data
    if (!nickname) return wx.showToast({
      title: '请输入昵称',
      icon: 'none'
    })
    editMember({
      ...addr,
      imgurl: imgurl || '',
      name: name || '',
      nickname: nickname || '',
@@ -93,7 +97,40 @@
        longitude: res.data.longitude || '',
        district: res.data.district || '',
        housearea: res.data.housearea || '',
        addr: {
          provinceCode: res.data.provinceCode,
          provinceName: res.data.provinceName,
          cityCode: res.data.cityCode,
          cityName: res.data.cityName,
          areaCode: res.data.areaCode,
          areaName: res.data.areaName,
        }
      })
    })
    getArea().then(res => {
      this.setData({ areaData: res.data })
    })
  },
  positionChange (e) {
    console.log(e.detail.value)
    const names = e.detail.value
    const codes = e.detail.code
    let addr = {
      provinceCode: codes[0] + '00',
      provinceName: names[0],
      cityCode: codes[1] + '00',
      cityName: names[1],
      areaCode: codes[2] + '00',
      areaName: names[2],
    }
    this.setData({ addr })
  },
  bindRegionChange(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    const temp = e.detail.value
    this.setData({
      region: e.detail.value
    })
  },
  changeAddr() {
@@ -107,12 +144,6 @@
          address: res.address,
        })
      }
    })
  },
  bindRegionChange(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      region: e.detail.value
    })
  },
  openHouse() {
wechat_jiaxuan/pages/userinfo/index.less
@@ -24,6 +24,17 @@
    margin-bottom: 40rpx;
    display: flex;
    align-items: center;
    .picker{
      width: 100%;
      display: flex;
      .picker_wrap{
        width: 528rpx;
        display: flex;
      }
      .text{
        flex: 1;
      }
    }
    .label{
      width: 110rpx;
      font-size: 30rpx;
wechat_jiaxuan/pages/userinfo/index.wxml
@@ -1,5 +1,5 @@
<view class="container">
  <image class="avatar" src="{{ imgurlFull ? imgurlFull : '../../static/images/default_avatar.png' }}" mode="widthFix"></image>
  <image class="avatar" bindtap="selMedia" src="{{ imgurlFull ? imgurlFull : '../../static/images/default_avatar.png' }}"></image>
  <view bindtap="selMedia" class="avatar_btn">更换头像</view>
  <view class="list">
    <view class="line">
@@ -8,7 +8,7 @@
    </view>
    <view class="line">
      <view class="label">姓名</view>
      <van-field type="text" border="{{ false }}" class="input" model:value="{{ name }}" maxlength="{{ 18 }}" clearable />
      <van-field type="text" border="{{ false }}" class="input" model:value="{{ name }}" maxlength="{{ 10 }}" clearable />
    </view>
    <view class="line">
      <view class="label">电话</view>
@@ -17,14 +17,17 @@
    <view class="line">
      <view class="label">城市</view>
      <view class="val">
        <view class="df_ac">
          <picker mode="region" bindchange="bindRegionChange" value="{{region}}">
            <view class="picker {{ region.length > 0 ? '' : 'placeholder9' }}">
              {{ region.length == 0 ? '选择城市' : '' }}{{region[0]}}{{region[1]}}{{region[2]}}
        <view class="df_ac" style="width: 100%">
          <picker class="picker" mode="region" value="{{ addr }}" bindchange="bindRegionChange" bindchange="positionChange">
            <view class="picker_wrap">
              <view class="text placeholder9" hidden="{{ addr.cityName }}">请选择地址</view>
              <view class="text" hidden="{{ !addr.cityName }}">
                {{ addr.provinceName }}{{ addr.cityName }}{{ addr.areaName }}
              </view>
              <image class="icon" src="../../static/icon/home_ar@2x.png" mode="widthFix"></image>
            </view>
          </picker>
        </view>
        <image class="icon" src="../../static/icon/home_ar@2x.png" mode="widthFix"></image>
      </view>
    </view>
    <view class="line">
@@ -40,8 +43,8 @@
    </view>
    <view class="line">
      <view class="label">面积</view>
      <van-field type="text" border="{{ false }}" class="input" model:value="{{ housearea }}" maxlength="{{ 15 }}" clearable />
      <!-- <text>m²</text> -->
      <van-field type="number" border="{{ false }}" class="input" model:value="{{ housearea }}" maxlength="{{ 30 }}" clearable />
      <text>m²</text>
    </view>
    <view class="line">
      <view class="label">户型</view>
wechat_jiaxuan/pages/userinfo/index.wxss
@@ -26,6 +26,17 @@
  display: flex;
  align-items: center;
}
.list .line .picker {
  width: 100%;
  display: flex;
}
.list .line .picker .picker_wrap {
  width: 528rpx;
  display: flex;
}
.list .line .picker .text {
  flex: 1;
}
.list .line .label {
  width: 110rpx;
  font-size: 30rpx;
wechat_jiaxuan/pages/userinfo/mysub.js
@@ -5,79 +5,45 @@
   * é¡µé¢çš„初始数据
   */
  data: {
    activeTabs: '0',
    activeTabs: '1',
    dataList: [],
    total: 0,
    page: 0,
    page: 1,
    capacity: 10,
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面加载
   */
  onLoad(options) {
    this.getList()
  },
  onReachBottom() {
    console.log('触底事件');
    const { total, dataList, page } = this.data
    if(total > dataList.length){
      this.setData({ page: page + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  getList() {
    const { page,  capacity} = this.data
    const { page,  capacity, activeTabs} = this.data
    customerLogPage({
      model: {},page,capacity
      model: {
        type: activeTabs
      },page,capacity
    }).then(res => {
      this.setData({ dataList: res.data.records })
      this.setData({
        dataList: res.data.records,
        total: res.data.total,
      })
    })
  },
  tabsChange(e) {
    const activeTabs = e.currentTarget.dataset.val
    this.setData({ activeTabs })
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面显示
   */
  onShow() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面隐藏
   */
  onHide() {
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面卸载
   */
  onUnload() {
  },
  /**
   * é¡µé¢ç›¸å…³äº‹ä»¶å¤„理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * é¡µé¢ä¸Šæ‹‰è§¦åº•事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * ç”¨æˆ·ç‚¹å‡»å³ä¸Šè§’分享
   */
  onShareAppMessage() {
    this.setData({ activeTabs, dataList: [], total: 0, page: 0,  })
    this.getList()
  }
})
wechat_jiaxuan/pages/userinfo/mysub.wxml
@@ -4,106 +4,55 @@
      <view class="name">需求</view>
      <view class="border"></view>
    </view> -->
    <view class="item {{ activeTabs == '0' ? 'active' : '' }}" data-val="1" bindtap="tabsChange">
    <view class="item {{ activeTabs == '1' ? 'active' : '' }}" data-val="1" bindtap="tabsChange">
      <view class="name">预约量尺</view>
      <view class="border"></view>
    </view>
    <view class="item {{ activeTabs == '1' ? 'active' : '' }}" data-val="2" bindtap="tabsChange">
    <view class="item {{ activeTabs == '2' ? 'active' : '' }}" data-val="2" bindtap="tabsChange">
      <view class="name">预算</view>
      <view class="border"></view>
    </view>
  </view>
  <view class="list">
    <view class="item">
    <view class="item" wx:for="{{ dataList }}">
      <view class="header">
        <view class="name">name</view>
        <view class="phone">198898</view>
        <view class="name">{{ item.name }}</view>
        <view class="phone">{{ item.phone }}</view>
      </view>
      <block wx:if="{{ false }}">
        <view class="line">
          <view class="label"><text class="spe">性</text>别</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label"><text class="spe">å¹´</text>龄</view>
          <view class="val">男</view>
        </view>
      <block wx:if="{{ activeTabs == '1' }}">
        <view class="line">
          <view class="label">所在城市</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">户型信息</view>
          <view class="val">男</view>
          <view class="val">
            <text>{{ item.provinceName }}{{ item.cityName }}{{ item.areaName || '' }}</text>
          </view>
        </view>
      </block>
      <!-- é¢„ç®— -->
      <block wx:if="{{ true }}">
      <block wx:else>
        <view class="line">
          <view class="label">房屋类型</view>
          <view class="val">男</view>
          <view class="val">{{ item.houseStatus == '0' ? '精装' : '毛坯' }}</view>
        </view>
        <view class="line">
          <view class="label">户型信息</view>
          <view class="val">男</view>
          <view wx:if="{{ item.houseType == '0' }}" class="val">一室一厅</view>
          <view wx:if="{{ item.houseType == '1' }}" class="val">二室一厅</view>
          <view wx:if="{{ item.houseType == '2' }}" class="val">两室两厅</view>
          <view wx:if="{{ item.houseType == '3' }}" class="val">三室一厅</view>
          <view wx:if="{{ item.houseType == '4' }}" class="val">四室一厅</view>
          <view wx:if="{{ item.houseType == '5' }}" class="val">五室两厅及以上</view>
        </view>
        <view class="line">
          <view class="label">房屋面积</view>
          <view class="val">男</view>
          <view class="val">{{ item.area }} m²</view>
        </view>
        <view class="line">
          <view class="label">装修预算</view>
          <view class="val">男</view>
          <view class="val">{{ item.budget }}万元</view>
        </view>
      </block>
      <view class="time">
        <view>提交时间:123213</view>
      </view>
    </view>
    <view class="item">
      <view class="header">
        <view class="name">name</view>
        <view class="phone">198898</view>
      </view>
      <block wx:if="{{ false }}">
        <view class="line">
          <view class="label"><text class="spe">性</text>别</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label"><text class="spe">å¹´</text>龄</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">所在城市</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">户型信息</view>
          <view class="val">男</view>
        </view>
      </block>
      <!-- é¢„ç®— -->
      <block wx:if="{{ true }}">
        <view class="line">
          <view class="label">房屋类型</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">户型信息</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">房屋面积</view>
          <view class="val">男</view>
        </view>
        <view class="line">
          <view class="label">装修预算</view>
          <view class="val">男</view>
        </view>
      </block>
      <view class="time">
        <view>提交时间:123213</view>
        <view>提交时间:{{ item.crmDate }}</view>
      </view>
    </view>
  </view>
wechat_jiaxuan/pages/webView/index.js
@@ -1,8 +1,5 @@
// pages/webView/index.js
// import Ls from '../../utils/storage'
// let ls = new Ls()
// import { saveBannerLookNum } from '../../api/index'
// import { decodePhone, bindPhone, memberUpdate } from '../../api/index'
Page({
  /**
@@ -12,134 +9,23 @@
    hasUserInfo: true,
    userInfo: {},
    id: '',
    link: 'https://m.zbom.com/mobile/styleTest.html?type=1'
    link: ''
  },
  // æ›´æ–°ç”¨æˆ·ä¿¡æ¯
  toLogin() {
    let that = this
    wx.getUserProfile({
      desc: '用于完善会员资料', // å£°æ˜ŽèŽ·å–ç”¨æˆ·ä¸ªäººä¿¡æ¯åŽçš„ç”¨é€”ï¼ŒåŽç»­ä¼šå±•ç¤ºåœ¨å¼¹çª—ä¸­ï¼Œè¯·è°¨æ…Žå¡«å†™
      success: (wxInfo) => {
        // console.log(wxInfo)
        let { nickName: name, avatarUrl: imgurl, gender } = wxInfo.userInfo
        let sex
        switch (gender) {
          case 0:
            sex = ''
            break;
          case 1:
            sex = 0
            break;
          case 2:
            sex = 1
            break;
          default:
            break;
        }
        memberUpdate({ name, imgurl, sex }).then(res => {
          ls.set('userInfo', res.member)
          that.getWxUserInfo()
          that.toSever()
        })
      },
      fail: (err) => {
        console.log(err)
        wx.showToast({
          title: '授权失败',
          icon: 'none'
        })
      }
    })
  },
  // èŽ·å–ç”¨æˆ·id和手机号
  bindgetphonenumber(e) {
    // ç”¨æˆ·æ‹’绝
    let that = this
    // ç”¨æˆ·åŒæ„
    if (e.detail.errMsg === 'getPhoneNumber:ok') {
      decodePhone({ code: e.detail.code }).then(res => {
        if (res.phone === undefined || res.phone.length === null || !res.phone) {
          wx.showToast({
            title: res.msg,
            icon: 'none'
          })
        } else {
          that.setPhoneNumber(res.phone)
        }
      })
    }
  },
  setPhoneNumber(phone) {
    console.log(phone);
    bindPhone({ phone }).then(res => {
      console.log(res)
      ls.set('userInfo', res.member)
      this.setData({ userInfo: res.member })
      this.toSever()
    })
  },
  toSever () {
    try {
      wx.openCustomerServiceChat({
        extInfo: {
          url: "https://work.weixin.qq.com/kfid/kfcfbccadc81cd01c0b?enc_scene=ENC5EhZgjepB9zsutZUQ5AiRnyN7GamomkuWsUA4bwigukSK6w5pVyRzcNDKurjFDNDC7" //客服ID
        },
        corpId: 'ww3686d2bb864ce3e2', //企业微信ID
        success(res) { }
      })
    } catch (error) {
      wx.showToast({
        title: '请更新至微信最新版本',
        icon: 'none'
      })
    }
  },
  // èŽ·å–ç”¨æˆ·å¾®ä¿¡ä¿¡æ¯
  getWxUserInfo() {
    // ä»Žç¼“存中获取用户微信信息
    ls.get('userInfo').then(res => {
      if (res) {
        if (!res.name || !res.imgurl) {
          this.setData({ hasUserInfo: false })
        } else {
          this.setData({ hasUserInfo: true, userInfo: res })
        }
      }
    })
    ls.get('sessionkey').then(res => {
      this.setData({ sessionkey: res })
    })
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面加载
   */
  onLoad: function (options) {
    return
    let that = this
    const eventChannel = this.getOpenerEventChannel()
   
    if (options.link) {
      that.setData({ link: options.link, id: options.id })
      saveBannerLookNum({ id: id })
    } else {
      // ç›‘听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
      eventChannel.on('acceptDataFromOpenerPage', function(data) {
        console.log('参数', data)
        if (data.title)  wx.setNavigationBarTitle({ title: data.title })
        that.setData({ link: data.link, id: data.id })
        saveBannerLookNum({ id: data.id })
        // saveBannerLookNum({ id: data.id })
      })
    }
    // // ç›‘听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
    // eventChannel.on('acceptDataFromOpenerPage', function(data) {
    //   if (data.title)  wx.setNavigationBarTitle({ title: data.title })
    //   that.setData({ link: data.link })
    // })
  },
  /**
@@ -149,12 +35,6 @@
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面显示
   */
  onShow: function () {
    this.getWxUserInfo()
  },
  /**
   * ç”Ÿå‘½å‘¨æœŸå‡½æ•°--监听页面隐藏
wechat_jiaxuan/pages/webView/index.wxml
@@ -1,42 +1,5 @@
<!--pages/webView/index.wxml-->
<web-view src="{{ link }}">
  <!-- <cover-view class="flex-cc bottom-btn-box">
    <cover-view class="btn">
      <button
        plain="true"
        style="background-color: #fff; border: 0; text-align: center;"
        open-type="share"
      >
        <cover-view>
          <cover-image style="margin: 8rpx auto; display: block;" mode="widthFix" src="/static/icon/share.png"></cover-image>
          <cover-view style="height: 14px; line-height: 14px; color: #666; font-size: 10px;">分享</cover-view>
        </cover-view>
      </button>
    </cover-view>
    <cover-view class="reserve-design">
      <button wx:if="{{!hasUserInfo}}" bindtap="toLogin">
        <cover-image src="/static/icon/home_ic_kefu.png" mode="widthFix"></cover-image>
        <cover-view class="title">立即咨询客服</cover-view>
      </button>
      <cover-view wx:else>
        <button
          wx:if="{{userInfo.phone && userInfo.phone != 'undefined' && userInfo.phone != null && userInfo.phone != ''}}"
          bindtap="toSever"
        >
          <cover-image src="/static/icon/home_ic_kefu.png" mode="widthFix"></cover-image>
          <cover-view class="title">立即咨询客服</cover-view>
        </button>
        <button
          wx:else
          open-type="getPhoneNumber"
          bindgetphonenumber="bindgetphonenumber"
        >
          <cover-image src="/static/icon/home_ic_kefu.png" mode="widthFix"></cover-image>
          <cover-view class="title">立即咨询客服</cover-view>
        </button>
      </cover-view>
    </cover-view>
  </cover-view> -->
</web-view>
wechat_jiaxuan/project.private.config.json
@@ -53,8 +53,8 @@
        },
        {
          "name": "",
          "pathName": "pages/store/store",
          "query": "code=zb_deco_jdid&name=家的iD",
          "pathName": "pages/homeId/index",
          "query": "code=zb_deco_jdid&name=%E5%AE%B6%E7%9A%84iD",
          "launchMode": "default",
          "scene": null
        }
wechat_jiaxuan/static/icon/ic_720.png
wechat_jiaxuan/utils/config.js
@@ -1,8 +1,8 @@
// export const baseUrl = 'https://jiaxuan.zbom.com/jx/wechat/' //正式服务器
export const baseUrl = 'http://192.168.0.135:10027' // æœ¬åœ°
// export const baseUrl = 'http://zbtest.ahapp.net/zbom_interface/jx/wechat/' //测试服务器
// export const baseUrl = 'http://192.168.0.135:10027' // æœ¬åœ°
export const baseUrl = 'https://dmtest.ahapp.net/web_interface' //测试服务器
// export const imageUrl = 'https://osswebcdn.zbom.com/jiaxuan/images/'
wechat_jiaxuan/utils/request.js
@@ -1,4 +1,5 @@
import { baseUrl } from "./config"
import { wxLoginCustomer } from '../api/index'
export function request(options){
  let loading = options.loading || '1' // é»˜è®¤å€¼1显示,否则不显示
@@ -19,9 +20,40 @@
        if (res.data.code === 200) {
          resolve(res.data || true)
        } else {
          if(res.data.code == 5111 && res.data.code == 5112){
            wx.navigateTo({
              url: '/pages/auth/auth',
          // if(res.data.code == 5112){
          //   wx.navigateTo({
          //     url: '/pages/auth/auth ',
          //   })
          // }
          if(res.data.code == 5111 || res.data.code == 5112){
            wx.login({
              timeout: 5000,
              success(res) {
                if (res.code) {
                  //发起网络请求
                  wxLoginCustomer({
                    code: res.code
                  }).then(res => {
                    console.log(res)
                    if (res && res.data.member) {
                      wx.switchTab({
                        url: '/pages/index/index',
                      })
                      wx.setStorageSync('member', res.data.member)
                      wx.setStorageSync('openid', res.data.member.openid)
                      wx.setStorageSync('sessionKey', res.data.sessionKey)
                      wx.setStorageSync('token', res.data.token)
                    } else {
                      console.log('登录失败!')
                    }
                  })
                } else {
                  console.log('登录失败!' + res)
                }
              },
              fail(err) {
                console.log(err)
              }
            })
          }
          res.data.message && wx.showToast({