033 商品搜索
文章目录
- SearchController.java
- Page.java
- SpuInfoServiceImpl.java
- SpuInfoService.java
- CubemallSearchApplication.java
- search.html
- pom.xml
功能分析
页面回显的数据:
searchMap
keywords:搜索的关键词
brand:过滤条件-品牌
category:过滤条件-分类列表
price:价格区间过滤条件
result:
brandList 品牌列表,可以通过聚合查询得到
categoryList
rows 商品列表
url:回显搜索的url,其中包含查询条件和过滤条件
page:
upper 上一页
currentpage 当前页
lpage、rpage 显示的最左和最右的页数
next 下一页
last 最后一页
total 总页数
请求的url:
/search/list
请求的方法:
get
参数:
keywords:查询的关键词
brand:品牌名称
category:分类名称
price:价格区间,使用"-"分割区间
sortRule:排序规则
sortField:排序字段
pageNum:页码
Service
- 接收controller传递的参数
- 根据参数封装查询条件
根据关键词查询
品牌过滤
分类过滤
价格区间过滤
排序
分页
高亮
聚合条件:品牌、分类 - 执行查询
- 取返回结果
总记录数
商品列表
聚合结果
Controller
- 接收页面提交的参数,封装成一个Map对象
- 调用service完成搜索功能,参数就是页面传递过来的参数
- 封装返回的数据
- 返回逻辑视图,模板的名称
SearchController.java
package com.xd.cubemall.search.controller;
import com.xd.cubemall.search.model.Page;
import com.xd.cubemall.search.service.SpuInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@Controller
public class SearchController {
@Autowired
private SpuInfoService spuInfoService;
@GetMapping("/search/list")
public String search(@RequestParam Map<String,String> paramMap, Model model) {
if (!paramMap.containsKey("keywords")) {
paramMap.put("keywords","");
}
Map<String, Object> resultMap = spuInfoService.search(paramMap);
//取分页数据
Long totalRows = Long.parseLong(resultMap.get("totalRows").toString());
//当前页码
int pageNum = Integer.parseInt(resultMap.get("pageNum").toString());
Page page = new Page(totalRows, pageNum, 60);
//4.url回显 /search/list?keywords=手机&brand=华为&category=手机
StringBuilder url = new StringBuilder();
url.append("/search/list");
//8.排序url特殊处理
StringBuilder sortUrl = new StringBuilder();
sortUrl.append("/search/list");
builderUrl(url, sortUrl, paramMap);
model.addAttribute("url", url);
model.addAttribute("sortUrl", sortUrl);
//向页面返回结果
model.addAttribute("searchMap",paramMap);
model.addAttribute("result",resultMap);
model.addAttribute("url",url);
model.addAttribute("page",page);
//返回模板名称
return "search";
}
/**
* 拼接翻页url地址中的携带参数
* @param url
* @param sortUrl
* @param searchMap
*/
private void builderUrl(StringBuilder url, StringBuilder sortUrl, Map<String, String> searchMap) {
if(!CollectionUtils.isEmpty(searchMap)){
// /search/list?keywords=手机&brand=华为
url.append("?");
sortUrl.append("?");
for (Map.Entry<String, String> entry : searchMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
//7.排除pageNum参与url拼接
if(!key.equals("pageNum")){
//5.特殊符号 + 处理
if(key.startsWith("spec")){
value = value.replace("+", "%2B");
}
//6. 删除版本特殊字符页面问题 482行 改为
// <a th:href="@{${#strings.replace(url,'&'+sm.key+'='+#strings.replace(sm.value,'+','%2B'),'')}}">×</a>
//拼接查询条件
url.append(key);
url.append("=");
url.append(value);
url.append("&");
/*
方式二: 将sortUrl拼接放到pageNum的判断中
排序url特殊处理不需要拼接排序字段和规则
*/
if(!key.equals("sortRule") && !key.equals("sortField")){
sortUrl.append(key);
sortUrl.append("=");
sortUrl.append(value);
sortUrl.append("&");
}
}
}
//将最后一位删除 根据下标删除元素
url.deleteCharAt(url.length()-1);
sortUrl.deleteCharAt(sortUrl.length()-1);
}
}
}
Page.java
package com.xd.cubemall.search.model;
import java.io.Serializable;
import java.util.List;
/**
* 分页对象
* @param <T>
*/
public class Page<T> implements Serializable{
//当前默认为第一页
public static final Integer pageNum = 1;
//默认每页显示条件
public static final Integer pageSize = 20;
//判断当前页是否为空或是小于1
public static Integer cpn(Integer pageNum){
if(null == pageNum || pageNum < 1){
pageNum = 1;
}
return pageNum;
}
// 页数(第几页)
private long currentpage;
// 查询数据库里面对应的数据有多少条
private long total;// 从数据库查处的总记录数
// 每页查5条
private int size;
// 下页
private int next;
private List<T> list;
// 最后一页
private int last;
private int lpage;
private int rpage;
//从哪条开始查
private long start;
//全局偏移量
public int offsize = 2;
public Page() {
super();
}
/****
*
* @param currentpage
* @param total
* @param pagesize
*/
public void setCurrentpage(long currentpage,long total,long pagesize) {
//可以整除的情况下
long pagecount = total/pagesize;
//如果整除表示正好分N页,如果不能整除在N页的基础上+1页
int totalPages = (int) (total%pagesize==0? total/pagesize : (total/pagesize)+1);
//总页数
this.last = totalPages;
//判断当前页是否越界,如果越界,我们就查最后一页
if(currentpage>totalPages){
this.currentpage = totalPages;
}else{
this.currentpage=currentpage;
}
//计算start
this.start = (this.currentpage-1)*pagesize;
}
//上一页
public long getUpper() {
return currentpage>1? currentpage-1: currentpage;
}
//总共有多少页,即末页
public void setLast(int last) {
this.last = (int) (total%size==0? total/size : (total/size)+1);
}
/****
* 带有偏移量设置的分页
* @param total
* @param currentpage
* @param pagesize
* @param offsize
*/
public Page(long total, int currentpage, int pagesize, int offsize) {
this.offsize = offsize;
initPage(total, currentpage, pagesize);
}
/****
*
* @param total 总记录数
* @param currentpage 当前页
* @param pagesize 每页显示多少条
*/
public Page(long total, int currentpage, int pagesize) {
initPage(total,currentpage,pagesize);
}
/****
* 初始化分页
* @param total
* @param currentpage
* @param pagesize
*/
public void initPage(long total,int currentpage,int pagesize){
//总记录数
this.total = total;
//每页显示多少条
this.size=pagesize;
//计算当前页和数据库查询起始值以及总页数
setCurrentpage(currentpage, total, pagesize);
//分页计算
int leftcount =this.offsize, //需要向上一页执行多少次
rightcount =this.offsize;
//起点页
this.lpage =currentpage;
//结束页
this.rpage =currentpage;
//2点判断
this.lpage = currentpage-leftcount; //正常情况下的起点
this.rpage = currentpage+rightcount; //正常情况下的终点
//页差=总页数和结束页的差
int topdiv = this.last-rpage; //判断是否大于最大页数
/***
* 起点页
* 1、页差<0 起点页=起点页+页差值
* 2、页差>=0 起点和终点判断
*/
this.lpage=topdiv<0? this.lpage+topdiv:this.lpage;
/***
* 结束页
* 1、起点页<=0 结束页=|起点页|+1
* 2、起点页>0 结束页
*/
this.rpage=this.lpage<=0? this.rpage+(this.lpage*-1)+1: this.rpage;
/***
* 当起点页<=0 让起点页为第一页
* 否则不管
*/
this.lpage=this.lpage<=0? 1:this.lpage;
/***
* 如果结束页>总页数 结束页=总页数
* 否则不管
*/
this.rpage=this.rpage>last? this.last:this.rpage;
}
public long getNext() {
return currentpage<last? currentpage+1: last;
}
public void setNext(int next) {
this.next = next;
}
public long getCurrentpage() {
return currentpage;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public long getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public long getLast() {
return last;
}
public long getLpage() {
return lpage;
}
public void setLpage(int lpage) {
this.lpage = lpage;
}
public long getRpage() {
return rpage;
}
public void setRpage(int rpage) {
this.rpage = rpage;
}
public long getStart() {
return start;
}
public void setStart(long start) {
this.start = start;
}
public void setCurrentpage(long currentpage) {
this.currentpage = currentpage;
}
/**
* @return the list
*/
public List<T> getList() {
return list;
}
/**
* @param list the list to set
*/
public void setList(List<T> list) {
this.list = list;
}
}
SpuInfoServiceImpl.java
package com.xd.cubemall.search.service.impl;
import com.xd.cubemall.common.utils.R;
import com.xd.cubemall.search.dao.SpuInfoDao;
import com.xd.cubemall.search.model.SpuInfo;
import com.xd.cubemall.search.repository.SpuInfoRepository;
import com.xd.cubemall.search.service.SpuInfoService;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class SpuInfoServiceImpl implements SpuInfoService {
@Autowired
private SpuInfoDao spuInfoDao;
@Autowired
private SpuInfoRepository spuInfoRepository;
@Autowired
private ElasticsearchRestTemplate template;
@Override
public Map<String, Object> search(Map<String, String> paramMap) {
// 1) 接收controller传递的参数
// 2) 根据参数封装查询条件
// 根据关键词查询
// 品牌过滤
// 分类过滤
// 价格区间过滤
// 排序
// 分页
// 高亮
// 聚合条件:品牌、分类
NativeSearchQuery query = buildQuery(paramMap);
// 3) 执行查询
SearchHits<SpuInfo> searchHits = template.search(query, SpuInfo.class);
// 4) 取返回结果
Map<String, Object> resultMap = parseResponse(searchHits);
//计算页面
long totalHits = searchHits.getTotalHits();
//取当前页码
String pageNumStr = paramMap.get("pageNum");
int pageNum = StringUtils.isNotBlank(pageNumStr)?Integer.parseInt(pageNumStr):1;
resultMap.put("pageNum", pageNum);
//计算总页数
int totalPages = (int) Math.ceil(totalHits / 60);
resultMap.put("totalPages",totalPages);
// 总记录数
// 商品列表
// 聚合结果
return resultMap;
}
private NativeSearchQuery buildQuery(Map<String,String> paramMap) {
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
String keywords = paramMap.get("keywords");
if (keywords == null) {
keywords = "";
}
// 根据关键词查询
builder.withQuery(QueryBuilders.matchQuery("spuName",keywords));
// 品牌过滤
String brand = paramMap.get("brand");
if (StringUtils.isNotBlank(brand)) {
builder.withFilter(QueryBuilders.termQuery("brandName",brand));
}
// 分类过滤
String category = paramMap.get("category");
if (StringUtils.isNotBlank(category)) {
builder.withFilter(QueryBuilders.termQuery("categoryName",category));
}
// 价格区间过滤
String price = paramMap.get("price");
if (StringUtils.isNotBlank(price)) {
String[] split = price.split("-");
builder.withFilter(QueryBuilders.rangeQuery("price").gte(split[0]).lte(split[1]));
}
// 排序
String sortRule = paramMap.get("sortRule");
String sortField = paramMap.get("sortField");
if (StringUtils.isNotBlank(sortRule) && StringUtils.isNotBlank(sortField)) {
if ("ASC".equals(sortRule)) {
builder.withSort(SortBuilders.fieldSort(sortField).order(SortOrder.ASC));
} else {
builder.withSort(SortBuilders.fieldSort(sortField).order(SortOrder.DESC));
}
}
// 分页
String pageNumString = paramMap.get("pageNum");
int pageNum = 1;
if (StringUtils.isNotBlank(pageNumString)) {
pageNum = Integer.parseInt(pageNumString);
}
builder.withPageable(PageRequest.of(pageNum - 1, 60));
// 高亮
builder.withHighlightBuilder(new HighlightBuilder()
.field("spuName")
.preTags("<em style=\"color:red\">")
.postTags("</em>"));
// 聚合条件:品牌、分类
builder.addAggregation(AggregationBuilders.terms("brandGroup").field("brandName"));
builder.addAggregation(AggregationBuilders.terms("categoryGroup").field("categoryName"));
return builder.build();
}
private Map<String, Object> parseResponse(SearchHits<SpuInfo> searchHits) {
Map<String, Object> resultMap = new HashMap<>();
//总记录数
long totalHits = searchHits.getTotalHits();
resultMap.put("totalRows",totalHits);
//商品列表
List<SpuInfo> spuInfoList = searchHits.getSearchHits().stream()
.map(e -> {
SpuInfo spuInfo = e.getContent();
List<String> highlightField = e.getHighlightField("spuName");
if (highlightField.size() > 0) {
spuInfo.setSpuName(highlightField.get(0));
}
return spuInfo;
})
.collect(Collectors.toList());
resultMap.put("rows",spuInfoList);
//聚合结果
Aggregations aggregations = searchHits.getAggregations();
//取品牌列表
ParsedStringTerms brandGroup = aggregations.get("brandGroup");
List<String> brandList = brandGroup.getBuckets().stream()
.map(b -> b.getKeyAsString())
.collect(Collectors.toList());
resultMap.put("brandList",brandList);
//取分类列表
ParsedStringTerms categoryGroup = aggregations.get("categoryGroup");
List<String> categoryList = categoryGroup.getBuckets().stream()
.map(b -> b.getKeyAsString())
.collect(Collectors.toList());
resultMap.put("categoryList",categoryList);
return resultMap;
}
@Override
public R putOnSale(long spuId) {
// 1.根据spuId查询对象的商品数据
SpuInfo spuInfo = spuInfoDao.getSpuInfoById(spuId);
// 2.商品数据包含的字段 Entity中包含的字段
// 3.使用ElasticSearchRepository对象将数据添加到索引库中
spuInfoRepository.save(spuInfo);
// 4.返回结果
return R.ok();
}
@Override
public R syncSpuInfo() {
// 1) 把所有的商品数据查询出来
List<SpuInfo> infoList = spuInfoDao.getSpuInfoList();
// 2) 把商品数据导入到ES中
spuInfoRepository.saveAll(infoList);
//返回结果
return R.ok();
}
}
SpuInfoService.java
package com.xd.cubemall.search.service;
import com.xd.cubemall.common.utils.R;
import java.util.Map;
public interface SpuInfoService {
public R putOnSale(long spuId);
public R syncSpuInfo();
Map<String, Object> search(Map<String,String> paramMap);
}
CubemallSearchApplication.java
package com.xd.cubemall.search;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.xd.cubemall.search.dao")
public class CubemallSearchApplication{
public static void main(String[] args) {
SpringApplication.run(CubemallSearchApplication.class);
}
}
search.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>产品列表页</title>
<link rel="icon" href="/img/favicon.ico">
<link rel="stylesheet" type="text/css" href="/css/all.css" />
<link rel="stylesheet" type="text/css" href="/css/pages-list.css" />
</head>
<body>
<!-- 头部栏位 -->
<!--页面顶部-->
<div id="nav-bottom">
<!--顶部-->
<div class="nav-top">
<div class="top">
<div class="py-container">
<div class="shortcut">
<ul class="fl">
<li class="f-item">魔方欢迎您!</li>
<li class="f-item">请<a href="http://login.jn.com:9200/oauth/toLogin" target="_blank">登录</a> <span><a href="register.html" target="_blank">免费注册</a></span></li>
</ul>
<div class="fr typelist">
<ul class="types">
<li class="f-item"><span>我的订单</span></li>
<li class="f-item"><span><a href="http://web.jn.com:9001/wcart/list" target="_blank">我的购物车</a></span></li>
<li class="f-item"><span><a href="home.html" target="_blank">我的魔方</a></span></li>
<li class="f-item"><span>魔方会员</span></li>
<li class="f-item"><span>企业采购</span></li>
<li class="f-item"><span>关注魔方</span></li>
<li class="f-item"><span><a href="cooperation.html" target="_blank">合作招商</a></span></li>
<li class="f-item"><span><a href="shoplogin.html" target="_blank">商家后台</a></span></li>
<li class="f-item"><span>网站导航</span></li>
</ul>
</div>
</div>
</div>
</div>
<!--头部-->
<div class="header">
<div class="py-container">
<div class="yui3-g Logo">
<div class="yui3-u Left logoArea">
<a class="logo-bd" title="魔方" href="index.html" target="_blank"></a>
</div>
<div class="yui3-u Rit searchArea">
<div class="search">
<form action="/search/list" class="sui-form form-inline">
<!--searchAutoComplete-->
<div class="input-append">
<input type="text" id="autocomplete" name="keywords" th:value="${searchMap.keywords}" class="input-error input-xxlarge" />
<button class="sui-btn btn-xlarge btn-danger" type="submit">搜索</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 商品分类导航 -->
<div class="typeNav">
<div class="py-container">
<div class="yui3-g NavList">
<div class="all-sorts-list">
<div class="yui3-u Left all-sort">
<h4>全部商品分类</h4>
</div>
<div class="sort">
<div class="all-sort-list2">
<div class="item bo">
<h3><a href="">图书、音像、数字商品</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书</a></dt>
<dd><a href="">免费</a><a href="">小说</a></em><a href="">励志与成功</a><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">家用电器</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书1</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
<dl class="fore9">
<dt>少儿</dt>
<dd><em><a href="">少儿</a></em><em><a href="">0-2岁</a></em><em><a href="">3-6岁</a></em><em><a href="">7-10岁</a></em><em><a href="">11-14岁</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">手机、数码</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书2</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">电脑、办公</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书3</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
<dl class="fore9">
<dt>少儿</dt>
<dd><em><a href="">少儿</a></em><em><a href="">0-2岁</a></em><em><a href="">3-6岁</a></em><em><a href="">7-10岁</a></em><em><a href="">11-14岁</a></em></dd>
</dl>
<dl class="fore10">
<dt>教育</dt>
<dd><em><a href="">教材教辅</a></em><em><a href="">考试</a></em><em><a href="">外语学习</a></em></dd>
</dl>
<dl class="fore11">
<dt>其它</dt>
<dd><em><a href="">英文原版书</a></em><em><a href="">港台图书</a></em><em><a href="">工具书</a></em><em><a href="">套装书</a></em><em><a href="">杂志/期刊</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">家居、家具、家装、厨具</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书4</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
<dl class="fore9">
<dt>少儿</dt>
<dd><em><a href="">少儿</a></em><em><a href="">0-2岁</a></em><em><a href="">3-6岁</a></em><em><a href="">7-10岁</a></em><em><a href="">11-14岁</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">服饰内衣</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书5</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">个护化妆</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书6</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
<dl class="fore9">
<dt>少儿</dt>
<dd><em><a href="">少儿</a></em><em><a href="">0-2岁</a></em><em><a href="">3-6岁</a></em><em><a href="">7-10岁</a></em><em><a href="">11-14岁</a></em></dd>
</dl>
<dl class="fore10">
<dt>教育</dt>
<dd><em><a href="">教材教辅</a></em><em><a href="">考试</a></em><em><a href="">外语学习</a></em></dd>
</dl>
<dl class="fore11">
<dt>其它</dt>
<dd><em><a href="">英文原版书</a></em><em><a href="">港台图书</a></em><em><a href="">工具书</a></em><em><a href="">套装书</a></em><em><a href="">杂志/期刊</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">运动健康</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书7</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
</div>
<div class="cat-right">
<dl class="categorys-brands" clstag="homepage|keycount|home2013|0601d">
<dt>推荐品牌出版商</dt>
<dd>
<ul>
<li>
<a href="">中华书局</a>
</li>
<li>
<a href="">人民邮电出版社</a>
</li>
</ul>
</dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">汽车用品</a></h3>
<div class="item-list clearfix">
<div class="subitem">
<dl class="fore1">
<dt><a href="">电子书8</a></dt>
<dd><em><a href="">免费</a></em><em><a href="">小说</a></em><em><a href="">励志与成功</a></em><em><a href="">婚恋/两性</a></em><em><a href="">文学</a></em><em><a href="">经管</a></em><em><a href="">畅读VIP</a></em></dd>
</dl>
<dl class="fore2">
<dt><a href="">数字音乐</a></dt>
<dd><em><a href="">通俗流行</a></em><em><a href="">古典音乐</a></em><em><a href="">摇滚说唱</a></em><em><a href="">爵士蓝调</a></em><em><a href="">乡村民谣</a></em><em><a href="">有声读物</a></em></dd>
</dl>
<dl class="fore3">
<dt><a href="">音像</a></dt>
<dd><em><a href="">音乐</a></em><em><a href="">影视</a></em><em><a href="">教育音像</a></em><em><a href="">游戏</a></em></dd>
</dl>
<dl class="fore4">
<dt>文艺</dt>
<dd><em><a href="">小说</a></em><em><a href="">文学</a></em><em><a href="">青春文学</a></em><em><a href="">传记</a></em><em><a href="">艺术</a></em></dd>
</dl>
<dl class="fore5">
<dt>人文社科</dt>
<dd><em><a href="">历史</a></em><em><a href="">心理学</a></em><em><a href="">政治/军事</a></em><em><a href="">国学/古籍</a></em><em><a href="">哲学/宗教</a></em><em><a href="">社会科学</a></em></dd>
</dl>
<dl class="fore6">
<dt>经管励志</dt>
<dd><em><a href="">经济</a></em><em><a href="">金融与投资</a></em><em><a href="">管理</a></em><em><a href="">励志与成功</a></em></dd>
</dl>
<dl class="fore7">
<dt>生活</dt>
<dd><em><a href="">家庭与育儿</a></em><em><a href="">旅游/地图</a></em><em><a href="">烹饪/美食</a></em><em><a href="">时尚/美妆</a></em><em><a href="">家居</a></em><em><a href="">婚恋与两性</a></em><em><a href="">娱乐/休闲</a></em><em><a href="">健身与保健</a></em><em><a href="">动漫/幽默</a></em><em><a href="">体育/运动</a></em></dd>
</dl>
<dl class="fore8">
<dt>科技</dt>
<dd><em><a href="">科普</a></em><em><a href="">IT</a></em><em><a href="">建筑</a></em><em><a href="">医学</a></em><em><a href="">工业技术</a></em><em><a href="">电子/通信</a></em><em><a href="">农林</a></em><em><a href="">科学与自然</a></em></dd>
</dl>
</div>
</div>
</div>
<div class="item">
<h3><a href="">彩票、旅行</a></h3>
</div>
<div class="item">
<h3><a href="">理财、众筹</a></h3>
</div>
<div class="item">
<h3><a href="">母婴、玩具</a></h3>
</div>
<div class="item">
<h3><a href="">箱包</a></h3>
</div>
<div class="item">
<h3><a href="">运动户外</a></h3>
</div>
<div class="item">
<h3><a href="">箱包</a></h3>
</div>
</div>
</div>
</div>
<div class="yui3-u Center navArea">
<ul class="nav">
<li class="f-item">服装城</li>
<li class="f-item">美妆馆</li>
<li class="f-item">魔方超市</li>
<li class="f-item">全球购</li>
<li class="f-item">闪购</li>
<li class="f-item">团购</li>
<li class="f-item">有趣</li>
<li class="f-item"><a href="seckill-index.html" target="_blank">秒杀</a></li>
</ul>
</div>
<div class="yui3-u Right"></div>
</div>
</div>
</div>
<!--list-content-->
<div class="main">
<div class="py-container">
<!--bread-->
<div class="bread">
<ul class="fl sui-breadcrumb">
<li>
<a href="#">全部结果</a>
</li>
<li class="active">
<span th:text="${searchMap.keywords}"></span>
</li>
</ul>
<ul class="fl sui-tag">
<li th:if="${#maps.containsKey(searchMap, 'brand')}" class="with-x">
品牌:<span th:text="${searchMap.brand}"></span><a th:href="@{${#strings.replace(url,'&brand='+searchMap.brand,'')}}">×</a>
</li>
<li th:if="${#maps.containsKey(searchMap, 'category')}" class="with-x">
分类:<span th:text="${searchMap.category}"></span><a th:href="@{${#strings.replace(url,'&category='+searchMap.category,'')}}">×</a>
</li>
<li th:if="${#maps.containsKey(searchMap, 'price')}" class="with-x">
价格:<span th:text="${searchMap.price}"></span><a th:href="@{${#strings.replace(url,'&price='+searchMap.price,'')}}">×</a>
</li>
<!-- <li th:if="${#strings.startsWith(sm.key,'spec_')}" th:each="sm : ${searchMap}" class="with-x">
<span th:text="${#strings.replace(sm.key,'spec_','')}"></span>:<span th:text="${#strings.replace(sm.value,'%2B','+')}"></span>
<a th:href="@{${#strings.replace(url,'&'+sm.key+'='+sm.value,'')}}">×</a>
</li> -->
</ul>
</div>
<script>
function toSearch(url){
window.location.href = encodeURIComponent(url);
}
</script>
<!--selector-->
<div class="clearfix selector">
<div class="type-wrap logo" th:unless="${#maps.containsKey(searchMap, 'brand')}">
<div class="fl key brand">品牌</div>
<div class="value logos">
<ul class="logo-list">
<li th:each="brand,brandStat:${result.brandList}">
<a th:href="@{${url}(brand=${brand})}" th:text="${brand}"></a>
</li>
</ul>
</div>
<div class="ext">
<a href="javascript:void(0);" class="sui-btn">多选</a>
<a href="javascript:void(0);">更多</a>
</div>
</div>
<div class="clearfix selector">
<div class="type-wrap logo" th:unless="${#maps.containsKey(searchMap, 'category')}">
<div class="fl key category">分类</div>
<div class="value logos">
<ul class="type-list">
<li th:each="cat,catStat:${result.categoryList}">
<a th:href="@{${url}(category=${cat})}" th:text="${cat}"></a>
</li>
</ul>
</div>
<div class="ext">
<a href="javascript:void(0);" class="sui-btn">多选</a>
<a href="javascript:void(0);">更多</a>
</div>
</div>
<!-- <div class="type-wrap" th:each="spec,specStat:${result.specList}" th:unless="${#maps.containsKey(searchMap, 'spec_'+spec.key)}">
<div class="fl key" th:text="${spec.key}"></div>
<div class="fl value">
<ul class="type-list">
<li th:each="op,opStat:${spec.value}">
<a th:href="@{${url}('spec_'+${spec.key}=${op})}" th:text="${op}"></a>
</li>
</ul>
</div>
<div class="fl ext"></div>
</div> -->
<div class="type-wrap" th:unless="${#maps.containsKey(searchMap, 'price')}">
<div class="fl key">价格</div>
<div class="fl value">
<ul class="type-list">
<li>
<a th:href="@{${url}(price='0-500')}" th:text="0-500元"></a>
</li>
<li>
<a th:href="@{${url}(price='500-1000')}" th:text="500-1000元"></a>
</li>
<li>
<a th:href="@{${url}(price='1000-1500')}" th:text="1000-1500元"></a>
</li>
<li>
<a th:href="@{${url}(price='1500-2000')}" th:text="1500-2000元"></a>
</li>
<li>
<a th:href="@{${url}(price='2000-3000')}" th:text="2000-3000元"></a>
</li>
<li>
<a th:href="@{${url}(price='3000-*')}" th:text="3000元以上"></a>
</li>
</ul>
</div>
<div class="fl ext">
</div>
</div>
<div class="type-wrap">
<div class="fl key">更多筛选项</div>
<div class="fl value">
<ul class="type-list">
<li>
<a>特点</a>
</li>
<li>
<a>系统</a>
</li>
<li>
<a>手机内存 </a>
</li>
<li>
<a>单卡双卡</a>
</li>
<li>
<a>其他</a>
</li>
</ul>
</div>
<div class="fl ext">
</div>
</div>
</div>
<!--details-->
<div id="glist" class="details">
<div class="sui-navbar">
<div class="navbar-inner filter">
<ul class="sui-nav">
<li class="active">
<a href="#">综合</a>
</li>
<li>
<a href="#">销量</a>
</li>
<li>
<a href="#">新品</a>
</li>
<li>
<a href="#">评价</a>
</li>
<li>
<a th:href="@{${url}(sortRule='ASC',sortField='price')}">价格↑</a>
</li>
<li>
<a th:href="@{${url}(sortRule='DESC',sortField='price')}">价格↓</a>
</li>
</ul>
</div>
</div>
<div class="goods-list">
<ul class="yui3-g">
<li class="yui3-u-1-5" th:each="spu,spuStat:${result.rows}">
<div class="list-wrap">
<div class="p-img">
<a th:href="'//item.jn.com:9011/items/'+${spu.id}+'.html'" target="_blank"><img th:src="${spu.imgUrl}" /></a>
</div>
<div class="price">
<strong>
<em>¥</em>
<i th:text="${spu.price}"></i>
</strong>
</div>
<div class="attr">
<a th:utext="${spu.spuName}" target="_blank" th:href="'//item.jn.com:9011/items/'+${spu.id}+'.html'" th:title="${spu.spuName}"></a>
</div>
<div class="commit">
<i class="command">已有<span>2000</span>人评价</i>
</div>
<div class="operate">
<a href="success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a>
<a href="javascript:void(0);" class="sui-btn btn-bordered">收藏</a>
</div>
</div>
</li>
</ul>
</div>
<div class="fr page">
<div class="sui-pagination pagination-large">
<ul>
<li class="prev disabled">
<a th:href="@{${url}(pageNum=page.upper)}">«上一页</a>
</li>
<li th:each="i:${#numbers.sequence(page.lpage,page.rpage)}" th:class="${i}==${page.currentpage}? 'active':''">
<a th:href="@{${url}(pageNum=${i})}" th:text="${i}"></a>
</li>
<li class="next">
<a th:href="@{${url}(pageNum=${page.next})}">下一页»</a>
</li>
</ul>
<div>
<span>共<i th:text="${page.last}"></i>页 </span>
<span>共<i th:text="${page.total}"></i>条数 </span>
</div>
</div>
</div>
</div>
<!--hotsale-->
<div class="clearfix hot-sale">
<h4 class="title">热卖商品</h4>
<div class="hot-list">
<ul class="yui3-g">
<li class="yui3-u-1-4">
<div class="list-wrap">
<div class="p-img">
<img src="/img/like_01.png" />
</div>
<div class="attr">
<em>Apple苹果iPhone 6s (A1699)</em>
</div>
<div class="price">
<strong>
<em>¥</em>
<i>4088.00</i>
</strong>
</div>
<div class="commit">
<i class="command">已有700人评价</i>
</div>
</div>
</li>
<li class="yui3-u-1-4">
<div class="list-wrap">
<div class="p-img">
<img src="/img/like_03.png" />
</div>
<div class="attr">
<em>金属A面,360°翻转,APP下单省300!</em>
</div>
<div class="price">
<strong>
<em>¥</em>
<i>4088.00</i>
</strong>
</div>
<div class="commit">
<i class="command">已有700人评价</i>
</div>
</div>
</li>
<li class="yui3-u-1-4">
<div class="list-wrap">
<div class="p-img">
<img src="/img/like_04.png" />
</div>
<div class="attr">
<em>256SSD商务大咖,完爆职场,APP下单立减200</em>
</div>
<div class="price">
<strong>
<em>¥</em>
<i>4068.00</i>
</strong>
</div>
<div class="commit">
<i class="command">已有20人评价</i>
</div>
</div>
</li>
<li class="yui3-u-1-4">
<div class="list-wrap">
<div class="p-img">
<img src="/img/like_02.png" />
</div>
<div class="attr">
<em>Apple苹果iPhone 6s (A1699)</em>
</div>
<div class="price">
<strong>
<em>¥</em>
<i>4088.00</i>
</strong>
</div>
<div class="commit">
<i class="command">已有700人评价</i>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- 底部栏位 -->
<!--页面底部-->
<div class="clearfix footer">
<div class="py-container">
<div class="footlink">
<div class="Mod-service">
<ul class="Mod-Service-list">
<li class="grid-service-item intro intro1">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
<li class="grid-service-item intro intro2">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
<li class="grid-service-item intro intro3">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
<li class="grid-service-item intro intro4">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
<li class="grid-service-item intro intro5">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
</ul>
</div>
<div class="clearfix Mod-list">
<div class="yui3-g">
<div class="yui3-u-1-6">
<h4>购物指南</h4>
<ul class="unstyled">
<li>购物流程</li>
<li>会员介绍</li>
<li>生活旅行/团购</li>
<li>常见问题</li>
<li>购物指南</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>配送方式</h4>
<ul class="unstyled">
<li>上门自提</li>
<li>211限时达</li>
<li>配送服务查询</li>
<li>配送费收取标准</li>
<li>海外配送</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>支付方式</h4>
<ul class="unstyled">
<li>货到付款</li>
<li>在线支付</li>
<li>分期付款</li>
<li>邮局汇款</li>
<li>公司转账</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>售后服务</h4>
<ul class="unstyled">
<li>售后政策</li>
<li>价格保护</li>
<li>退款说明</li>
<li>返修/退换货</li>
<li>取消订单</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>特色服务</h4>
<ul class="unstyled">
<li>夺宝岛</li>
<li>DIY装机</li>
<li>延保服务</li>
<li>魔方E卡</li>
<li>魔方通信</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>帮助中心</h4>
<img src="./img/wx_cz.jpg">
</div>
</div>
</div>
<div class="Mod-copyright">
<ul class="helpLink">
<li>关于我们<span class="space"></span></li>
<li>联系我们<span class="space"></span></li>
<li>关于我们<span class="space"></span></li>
<li>商家入驻<span class="space"></span></li>
<li>营销中心<span class="space"></span></li>
<li>友情链接<span class="space"></span></li>
<li>关于我们<span class="space"></span></li>
<li>营销中心<span class="space"></span></li>
<li>友情链接<span class="space"></span></li>
<li>关于我们</li>
</ul>
<p></p>
<p></p>
</div>
</div>
</div>
</div>
<!--页面底部END-->
<!-- 基础js库 -->
<!--侧栏面板开始-->
<div class="J-global-toolbar">
<div class="toolbar-wrap J-wrap">
<div class="toolbar">
<div class="toolbar-panels J-panel">
<!-- 购物车 -->
<div style="visibility: hidden;" class="J-content toolbar-panel tbar-panel-cart toolbar-animate-out">
<h3 class="tbar-panel-header J-panel-header">
<a href="" class="title"><i></i><em class="title">购物车</em></a>
<span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('cart');" ></span>
</h3>
<div class="tbar-panel-main">
<div class="tbar-panel-content J-panel-content">
<div id="J-cart-tips" class="tbar-tipbox hide">
<div class="tip-inner">
<span class="tip-text">还没有登录,登录后商品将被保存</span>
<a href="#none" class="tip-btn J-login">登录</a>
</div>
</div>
<div id="J-cart-render">
<!-- 列表 -->
<div id="cart-list" class="tbar-cart-list">
</div>
</div>
</div>
</div>
<!-- 小计 -->
<div id="cart-footer" class="tbar-panel-footer J-panel-footer">
<div class="tbar-checkout">
<div class="jtc-number"> <strong class="J-count" id="cart-number">0</strong>件商品 </div>
<div class="jtc-sum"> 共计:<strong class="J-total" id="cart-sum">¥0</strong> </div>
<a class="jtc-btn J-btn" href="#none" target="_blank">去购物车结算</a>
</div>
</div>
</div>
<!-- 我的关注 -->
<div style="visibility: hidden;" data-name="follow" class="J-content toolbar-panel tbar-panel-follow">
<h3 class="tbar-panel-header J-panel-header">
<a href="#" target="_blank" class="title"> <i></i> <em class="title">我的关注</em> </a>
<span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('follow');"></span>
</h3>
<div class="tbar-panel-main">
<div class="tbar-panel-content J-panel-content">
<div class="tbar-tipbox2">
<div class="tip-inner"> <i class="i-loading"></i> </div>
</div>
</div>
</div>
<div class="tbar-panel-footer J-panel-footer"></div>
</div>
<!-- 我的足迹 -->
<div style="visibility: hidden;" class="J-content toolbar-panel tbar-panel-history toolbar-animate-in">
<h3 class="tbar-panel-header J-panel-header">
<a href="#" target="_blank" class="title"> <i></i> <em class="title">我的足迹</em> </a>
<span class="close-panel J-close" onclick="cartPanelView.tbar_panel_close('history');"></span>
</h3>
<div class="tbar-panel-main">
<div class="tbar-panel-content J-panel-content">
<div class="jt-history-wrap">
<ul>
<!--<li class="jth-item">
<a href="#" class="img-wrap"> <img src="../../.../portal/img/like_03.png" height="100" width="100" /> </a>
<a class="add-cart-button" href="#" target="_blank">加入购物车</a>
<a href="#" target="_blank" class="price">¥498.00</a>
</li>
<li class="jth-item">
<a href="#" class="img-wrap"> <img src="../../../portal/img/like_02.png" height="100" width="100" /></a>
<a class="add-cart-button" href="#" target="_blank">加入购物车</a>
<a href="#" target="_blank" class="price">¥498.00</a>
</li>-->
</ul>
<a href="#" class="history-bottom-more" target="_blank">查看更多足迹商品 >></a>
</div>
</div>
</div>
<div class="tbar-panel-footer J-panel-footer"></div>
</div>
</div>
<div class="toolbar-header"></div>
<!-- 侧栏按钮 -->
<div class="toolbar-tabs J-tab">
<div onclick="cartPanelView.tabItemClick('cart')" class="toolbar-tab tbar-tab-cart" data="购物车" tag="cart" >
<i class="tab-ico"></i>
<em class="tab-text"></em>
<span class="tab-sub J-count " id="tab-sub-cart-count">0</span>
</div>
<div onclick="cartPanelView.tabItemClick('follow')" class="toolbar-tab tbar-tab-follow" data="我的关注" tag="follow" >
<i class="tab-ico"></i>
<em class="tab-text"></em>
<span class="tab-sub J-count hide">0</span>
</div>
<div onclick="cartPanelView.tabItemClick('history')" class="toolbar-tab tbar-tab-history" data="我的足迹" tag="history" >
<i class="tab-ico"></i>
<em class="tab-text"></em>
<span class="tab-sub J-count hide">0</span>
</div>
</div>
<div class="toolbar-footer">
<div class="toolbar-tab tbar-tab-top" > <a href="#"> <i class="tab-ico "></i> <em class="footer-tab-text">顶部</em> </a> </div>
<div class="toolbar-tab tbar-tab-feedback" > <a href="#" target="_blank"> <i class="tab-ico"></i> <em class="footer-tab-text ">反馈</em> </a> </div>
</div>
<div class="toolbar-mini"></div>
</div>
<div id="J-toolbar-load-hook"></div>
</div>
</div>
<script type="text/javascript" src="/js/all.js"></script>
</body>
</html>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>cubemall-search</artifactId>
<packaging>jar</packaging>
<name>chubemall-search</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
<elasticsearch.version>7.10.2</elasticsearch.version>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>junit</groupId>-->
<!-- <artifactId>junit</artifactId>-->
<!-- <version>3.8.1</version>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
<!--引入common公共模块-->
<dependency>
<groupId>com.xd.cubemall</groupId>
<artifactId>cubemall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.elasticsearch.client</groupId>-->
<!-- <artifactId>elasticsearch-rest-high-level-client</artifactId>-->
<!-- <version>7.10.2</version>-->
<!-- </dependency>-->
<!--阿里云OSS-->
<!-- <dependency>-->
<!-- <groupId>com.aliyun.oss</groupId>-->
<!-- <artifactId>aliyun-sdk-oss</artifactId>-->
<!-- <version>3.17.4</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.thymeleaf</groupId>-->
<!-- <artifactId>thymeleaf</artifactId>-->
<!-- <version>3.0.11.RELEASE</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>