一、分页查询:
1.1 前台:
<!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="/static/search/assets/img/favicon.ico">
<link rel="stylesheet" type="text/css" href="/static/search/css/webbase.css" />
<link rel="stylesheet" type="text/css" href="/static/search/css/pages-list.css" />
<link rel="stylesheet" type="text/css" href="/static/search/css/widget-cartPanelView.css" />
<style>
#chooseCategory{
display: none;
}
.dotted{
display: none;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
//1. 向字符串类扩展方法
String.prototype.contains=function(str){
return this.indexOf(str) > -1;
}
//2. 关键字查询
function search(){
drawPageNav()
location.href = replaceParamVal(location.href,"keywords",$("#keywords").val());
}
//3. 添加分类
function addCategory(v){
//在location.href中添加分类字段
drawPageNav()
location.href = replaceParamVal(location.href,"category",v);
return false;
}
//4. 显示分类面板,隐藏面包屑导航中的分类
// function hideCategory(v){
// $(v).css("display","none");
// categoryPanel.css("display","block");
// }
//5. 添加品牌
function addBrand(v) {
drawPageNav()
location.href = replaceParamVal(location.href,"brand",v);
return false;
}
//6. 添加规格
function addSpec(specText,optionName){
let val = (specText + ":" + optionName);
drawPageNav()
location.href = replaceParamVal(location.href,"spec",val,true);
return false;
}
//7. 添加价格区间
function addPrice(price){
drawPageNav()
location.href = replaceParamVal(location.href,"price",price);
return false;
}
//8. 排序价格
function addSort(sortField,sortOrder){ //参数1:排序字段 参数2:排序升序(asc)还是降序(desc)
drawPageNav()
location.href = replaceParamVal(location.href,"sort",sortOrder + ":" + sortField);
return false;
}
//9. 分页查询
function findByPage(p){
drawPageNav();
location.href = replaceParamVal(location.href,"page",p);
return false;
}
$(function(){
drawPageNav();
})
/**
* 功能: 绘制按钮导航
* 参数:
* 返回值:
* 时间: 2021/8/5 15:10
*/
function drawPageNav(){
//0. 定义代表前后省略号的变量
let firstDot = true;
let lastDot = true;
//1. 得到当前页
let page = [[${param.page == null ? 1 : param.page}]]
//2. 得到总页数
let totalPage = [[${resultMap.totalPage}]]
//3. 定义首页和尾页变量
let firstPage = 1;
let lastPage = totalPage;
//4. 根据情况得到首页与尾页
if(totalPage > 5){
if(page <= 3){
lastPage = 5;
firstDot = false;
}else if(page >= totalPage - 2){
firstPage = totalPage - 4;
lastDot = false;
}else{
firstPage = page - 2;
lastPage = page + 2;
}
}else{
firstDot = false;
lastDot = false;
}
//5. 根据首页与尾页遍历得到分页导航
//5.1 定义最终生成的标签字符串
let info = "";
for(let i = firstPage;i <= lastPage; i++){
info += "<li class="+ (i == page ? 'active' : '') +">";
info += "<a onclick=findByPage("+i+")>" + i + "</a>";
info += "</li>";
}
//6. 为pageNav导航层赋值
$($(".page ul li")[1]).after(info);
//7. 动态生成省略号
$(".dotted").css("display","none");
if(firstDot){
$("#first").css("display","inline-block");
}
if(lastDot){
$("#last").css("display","inline-block");
}
}
/**
* 功能:路径替换函数
* @param url 目前的url
* @param paramName 需要替换的参数属性名
* @param replaceVal 需要替换的参数的新属性值
* @param forceAdd 该参数是否可以重复查询(spec=网络:4G&spec=机身内存:32G),即一次可以查询多个规格
* @returns {string} 替换或添加后的url
*/
function replaceParamVal(url, paramName, replaceVal,forceAdd=false) {
let oUrl = decodeURI(url.toString());
let nUrl = "";
if (oUrl.contains(paramName+"=")) {
let split = replaceVal.toString().split(":");
let str = paramName+"="+split[0];
if( forceAdd && !oUrl.contains(str)) { //第一次时向url添加内容
if (oUrl.contains("?")) {
nUrl = oUrl + "&" + paramName + "=" + replaceVal;
} else {
nUrl = oUrl + "?" + paramName + "=" + replaceVal;
}
} else {
// /category=手机/ig
if(paramName.startsWith("spec")){ //替换规格内容
let re = eval('/(' + str + ':)([^&]*)/gi');
nUrl = oUrl.replace(re, str + ':' + split[1]);
} else{ //替换除规格外的其它内容
let re = eval('/(' + paramName + '=)([^&]*)/gi');
nUrl = oUrl.replace(re, paramName + '=' + replaceVal);
}
}
} else {
// http://localhost:9001/student/list?username=aaa&pwd=123
if (oUrl.contains("?")) { //包含?
nUrl = oUrl + "&" + paramName + "=" + replaceVal;
} else { //不包含?
nUrl = oUrl + "?" + paramName + "=" + replaceVal;
}
}
return nUrl;
}
</script>
</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="/static/search/login.html" target="_blank">登录</a>
<span><a href="/static/search/register.html" target="_blank">免费注册</a></span></li>
</ul>
<ul class="fr">
<li class="f-item">我的订单</li>
<li class="f-item space"></li>
<li class="f-item">
<a href="/static/search/home.html" target="_blank">我的泽易购</a>
</li>
<li class="f-item space"></li>
<li class="f-item">泽易购会员</li>
<li class="f-item space"></li>
<li class="f-item">企业采购</li>
<li class="f-item space"></li>
<li class="f-item">关注泽易购</li>
<li class="f-item space"></li>
<li class="f-item" id="service">
<span>客户服务</span>
<ul class="service">
<li>
<a href="/static/search/cooperation.html" target="_blank">合作招商</a>
</li>
<li>
<a href="/static/search/shoplogin.html" target="_blank">商家后台</a>
</li>
<li>
<a href="/static/search/cooperation.html" target="_blank">合作招商</a>
</li>
<li>
<a href="#">商家后台</a>
</li>
</ul>
</li>
<li class="f-item space"></li>
<li class="f-item">网站导航</li>
</ul>
</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="/static/search/JD-index.html" target="_blank"></a>
</div>
<div class="yui3-u Center searchArea">
<div class="search">
<form class="sui-form form-inline" >
<!--searchAutoComplete-->
<div class="input-append">
<input type="text" th:value="${vo.keywords}" id="keywords" class="input-error input-xxlarge" />
<input class="sui-btn btn-xlarge btn-danger" type="button" onclick="search()" value="搜索">
</div>
</form>
</div>
<div class="hotwords">
<ul>
<li class="f-item">泽易购首发</li>
<li class="f-item">亿元优惠</li>
<li class="f-item">9.9元团购</li>
<li class="f-item">每满99减30</li>
<li class="f-item">亿元优惠</li>
<li class="f-item">9.9元团购</li>
<li class="f-item">办公用品</li>
</ul>
</div>
</div>
<div class="yui3-u Right shopArea">
<div class="fr shopcar">
<div class="show-shopcar" id="shopcar">
<span class="car"></span>
<a class="sui-btn btn-default btn-xlarge" href="/static/search/cart.html" target="_blank">
<span>我的购物车</span>
<i class="shopnum">0</i>
</a>
<div class="clearfix shopcarlist" id="shopcarlist" style="display:none">
<p>"啊哦,你的购物车还没有商品哦!"</p>
<p>"啊哦,你的购物车还没有商品哦!"</p>
</div>
</div>
</div>
</div>
</div>
<div class="yui3-g NavList">
<div class="yui3-u Left all-sort">
<h4>全部商品分类</h4>
</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="/static/search/seckill-index.html" target="_blank">秒杀</a>
</li>
</ul>
</div>
<div class="yui3-u Right"></div>
</div>
</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="#">全部结果
总共:<span th:text="${resultMap.total}"/>条
</a>
</li>
<li class="active">智能手机</li>
</ul>
<ul class="tags-choose" id="chooseCategory">
<li class="tag">商品分类:<span></span><i class="sui-icon icon-tb-close"
onclick="hideCategory(this.parentNode.parentNode)"></i></li>
</ul>
<div class="clearfix"></div>
</div>
<!--selector-->
<div class="clearfix selector">
<div class="type-wrap">
<div class="fl key">商品分类</div>
<div class="fl value">
<a href="#" th:each="category : ${resultMap.categoryList}"
th:onclick="addCategory([[${category}]])">[[${category}]] </a>
</div>
<div class="fl ext"></div>
</div>
<div class="type-wrap logo">
<div class="fl key brand">品牌</div>
<div class="value logos">
<ul class="logo-list">
<!--1.显示品牌-->
<li th:each="brand : ${resultMap.brandList}" th:align="center">
<a href="#" th:onclick="addBrand([[${brand.text}]])">[[${brand.text}]]</a>
</li>
</ul>
</div>
</div>
<!--2.显示规格列表-->
<div class="type-wrap" th:each="spec,stat : ${resultMap.specList}">
<div class="fl key">[[${spec.text}]]</div>
<div class="fl value">
<ul class="type-list">
<li th:each="option : ${spec.options}">
<a th:onclick="addSpec([[${spec.text}]],[[${option.optionName}]])">
[[${option.optionName}]]</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 onclick="addPrice('0_500')">0-500元</a>
</li>
<li>
<a onclick="addPrice('500_1000')">500-1000元</a>
</li>
<li>
<a onclick="addPrice('1000_1500')">1000-1500元</a>
</li>
<li>
<a onclick="addPrice('1500_2000')">1500-2000元</a>
</li>
<li>
<a onclick="addPrice('2000_3000')">2000-3000元 </a>
</li>
<li>
<a onclick="addPrice('3000_*')">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 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 href="#" onclick="addSort('price','asc')">价格↑</a>
</li>
<li>
<a href="#" onclick="addSort('price','desc')">价格↓</a>
</li>
</ul>
</div>
</div>
<div class="goods-list">
<ul class="yui3-g">
<li class="yui3-u-1-5" th:each="result : ${resultMap.rows}">
<div class="list-wrap">
<div class="p-img">
<a href="#" target="_blank">
<img th:src="${result.image}" /></a>
</div>
<div class="price">
<strong>
<em>¥</em>
<i th:text="${result.price}"></i>
</strong>
</div>
<div class="attr">
<em th:utext="${result.title}"></em>
</div>
<div class="cu">
<em></em>
</div>
<div class="commit">
<i class="command">已有2000人评价</i>
</div>
<div class="operate">
<a href="/static/search/success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a>
<a href="javascript:void(0);" class="sui-btn btn-bordered">对比</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 href="#">«上一页</a>
</li>
<li class="dotted" id="first"><span>...</span></li>
<!--两种处理数字与字符串转换的方式-->
<!--<li th:class="${p+'' == param.page+''} ? 'active' : '' " th:each="p : ${#numbers.sequence(1,resultMap.totalPage)}">-->
<!--<li th:class="${#numbers.formatInteger(p,0) == #numbers.formatInteger(param.page,0)} ? 'active' : '' "-->
<!-- th:each="p : ${#numbers.sequence(1,resultMap.totalPage)}">-->
<!-- <a href="#" th:onclick="findByPage([[${p}]])">[[${p}]]</a>-->
<!--</li>-->
<li class="dotted" id="last"><span>...</span></li>
<li class="next">
<a href="#">下一页»</a>
</li>
</ul>
<div><span>共[[${resultMap.totalPage}]]页 </span><span>
到第
<input type="text" class="page-num">
页 <button class="page-confirm" onclick="alert(1)">确定</button></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="/static/search/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="/static/search/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="/static/search/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="/static/search/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="/static/search/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>
</div>
</div>
</div>
</div>
<!--页面底部END-->
<!--侧栏面板开始-->
<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="/static/search/#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="/static/search/#" class="img-wrap"> <img src="/static/search/.portal/img/like_03.png" height="100" width="100" /> </a>
<a class="add-cart-button" href="/static/search/#" target="_blank">加入购物车</a>
<a href="/static/search/#" target="_blank" class="price">¥498.00</a>
</li>
<li class="jth-item">
<a href="/static/search/#" class="img-wrap"> <img src="/static/search/portal/img/like_02.png" height="100" width="100" /></a>
<a class="add-cart-button" href="/static/search/#" target="_blank">加入购物车</a>
<a href="/static/search/#" target="_blank" class="price">¥498.00</a>
</li>-->
</ul>
<a href="/static/search/#" 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="/static/search/#"> <i class="tab-ico "></i> <em class="footer-tab-text">顶部</em> </a>
</div>
<div class="toolbar-tab tbar-tab-feedback">
<a href="/static/search/#" 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/template" id="tbar-cart-item-template">
<div class="tbar-cart-item">
<div class="jtc-item-promo">
<em class="promo-tag promo-mz">满赠<i class="arrow"></i></em>
<div class="promo-text">已购满600元,您可领赠品</div>
</div>
<div class="jtc-item-goods">
<span class="p-img"><a href="/static/search/#" target="_blank"><img src="/static/search/{2}" alt="{1}" height="50" width="50" /></a></span>
<div class="p-name">
<a href="/static/search/#">{1}</a>
</div>
<div class="p-price"><strong>¥{3}</strong>×{4} </div>
<a href="/static/search/#none" class="p-del J-del">删除</a>
</div>
</div>
</script>
<!--侧栏面板结束-->
<script type="text/javascript" src="/static/search/js/plugins/jquery/jquery.min.js"></script>
<!-- -->
<script type="text/javascript">
$(function() {
$("#service").hover(function() {
$(".service").show();
}, function() {
$(".service").hide();
});
$("#shopcar").hover(function() {
$("#shopcarlist").show();
}, function() {
$("#shopcarlist").hide();
});
})
</script>
<script type="text/javascript" src="/static/search/js/model/cartModel.js"></script>
<script type="text/javascript" src="/static/search/js/czFunction.js"></script>
<script type="text/javascript" src="/static/search/js/plugins/jquery.easing/jquery.easing.min.js"></script>
<script type="text/javascript" src="/static/search/js/plugins/sui/sui.min.js"></script>
<script type="text/javascript" src="/static/search/js/widget/cartPanelView.js"></script>
</body>
</html>
1.2 后台:
1.2.1 ItemVo实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ItemVo implements Serializable {
//1. 查询关键字对象
private String keywords;
//2. 商品分类
private String category;
//3. 品牌查询
private String brand;
//4. 规格查询(类似:[网络:4G,机身内存:128G])
private List<String> spec;
//5. 价格区间(price:500_1000)
private String price;
//6. 排序(类似:asc:price)
private String sort;
//7. 当前页
private int page = 1;
//8. 每页大小
private int pageSize = 10;
}
1.2.2 ItemSearchServiceImpl服务层:
...
//3.1 得到当前页
int page = params.getPage();
//3.2 得到每页大小
int pageSize = params.getPageSize();
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder()
.withPageable(PageRequest.of(page - 1,pageSize));
...
//21. 存放高亮数据到大集合
resultMap.put("rows",highlights); //当前分页记录集合
resultMap.put("categoryList",categoryList); //分类
resultMap.put("total",total); //总记录数
resultMap.put("totalPage",totalPage); //总页数
二、与首页对接 :
2.1 在portal-web这个模块中的resources/index.html文件中添加:
<!-- JS部分: -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
function search(){
//1. 得到搜索框中的内容
let keywords = $("#keywords").val();
//2. 跳转到搜索页面
location.href = "http://search.zeyigou.com?keywords=" + keywords;
}
</script>
<!-- HTML部分: -->
<form action="" class="sui-form form-inline">
<!--searchAutoComplete-->
<div class="input-append">
<input type="text" id="keywords" class="input-error input-xxlarge" />
<button class="sui-btn btn-xlarge btn-danger" type="button" onclick="search()">搜索</button>
</div>
</form>
2.2 运行效果如下:
三、商品审核通过后,同步索引库:
3.1 在zyg-manager-web工程的goodsController中审核方法修改如下:
/**
* 功能: 批量审核数据
* 参数:
* 返回值: com.zelin.utils.R
* 时间: 2021/7/30 16:11
*/
@RequestMapping("/updateStatus")
public R updateStatus(Long[] ids,String status){
//1. 审核商品
goodsService.updateStatus(ids,status);
//2. 根据商品id查询sku列表
List<ItemEntity> entities = itemService.findItemsbyGoodsId(ids);
//3. 查询出tb_item表的数据并同时更新到索引库中(增量更新)
if(status.equals("1") && entities.size() > 0) {
searchService.updateToIndex(entities);
}
return R.ok();
}
3.2 在zyg-sellerGoods-Service工程添加findItemsbyGoodsId()
@Override
public List<ItemEntity> findItemsbyGoodsId(Long... ids) {
return this.baseMapper.selectList(new QueryWrapper<ItemEntity>().in("goods_id",ids));
}
3.3 在zyg-search-Service工程定义导入到索引库方法:
/**
* 功能: 将所有的商品添加到索引库中(增量更新)
* 参数:
* 返回值: void
* 时间: 2021/8/5 16:54
*/
@Override
public void updateToIndex(List<ItemEntity> entities) {
restTemplate.save(entities);
}
3.4 最后在kibana中查询结果: