实战SSM_O2O商铺_40【前端展示】首页轮播图和一级商铺View层的实现

简介: 实战SSM_O2O商铺_40【前端展示】首页轮播图和一级商铺View层的实现

概述


在完成了后端 实战SSM_O2O商铺_39【前端展示】首页轮播图和一级商铺Dao+Service+Controller层的开发 的开发之后,我们来实现View层的部分

20180725210919147.png


index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>我的生活</title>
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
<link rel="shortcut icon" href="/o2o/favicon.ico">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet"
  href="//g.alicdn.com/msui/sm/0.6.2/css/sm.min.css">
<link rel="stylesheet"
  href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css">
<link rel="stylesheet" href="../resources/css/frontend/index/index.css">
</head>
<body>
  <div class="page-group">
    <div class="page">
      <header class="bar bar-nav">
        <!-- <a class="button button-link button-nav pull-left" href="/demos/card" data-transition='slide-out'>
                      <span class="icon icon-left"></span>
                      返回
                  </a> -->
        <h1 class="title">O2O</h1>
      </header>
      <nav class="bar bar-tab">
        <a class="tab-item active" href="#"> <span
          class="icon icon-home"></span> <span class="tab-label">首页</span>
        </a> <a class="tab-item" href="#" id='me'> <span class="icon icon-me"></span>
          <span class="tab-label">我</span>
        </a>
      </nav>
      <div class="content">
        <!-- 这里是页面内容区 -->
        <div class="swiper-container index-banner" data-space-between='10'>
          <div class="swiper-wrapper">
            <!-- <div class="swiper-slide img-wrap">
                                <img class="banner-img" src="//gqianniu.alicdn.com/bao/uploaded/i4//tfscom/i1/TB1n3rZHFXXXXX9XFXXXXXXXXXX_!!0-item_pic.jpg_320x320q60.jpg" alt="">
                            </div>
                            <div class="swiper-slide img-wrap">
                                <img class="banner-img" src="//gqianniu.alicdn.com/bao/uploaded/i4//tfscom/i4/TB10rkPGVXXXXXGapXXXXXXXXXX_!!0-item_pic.jpg_320x320q60.jpg" alt="">
                            </div>
                            <div class="swiper-slide img-wrap">
                                <img class="banner-img" src="//gqianniu.alicdn.com/bao/uploaded/i4//tfscom/i1/TB1kQI3HpXXXXbSXFXXXXXXXXXX_!!0-item_pic.jpg_320x320q60.jpg" alt="">
                            </div> -->
          </div>
          <div class="swiper-pagination"></div>
        </div>
        <div class='total-shop-button'>
          <a href="/o2o/frontend/shoplist" external>全部商店</a>
        </div>
        <div class="row">
          <!-- <div class="col-50 shop-classify">
                            <div class='word'>
                                <p class='shop-title'>本期推荐</p>
                                <p class='shop-desc'>近期相关活动、新款上市、旅游资讯</p>
                            </div>
                            <div class='shop-classify-img-warp'>
                                <img class='shop-img' src="static/index/display13.png">
                            </div>
                        </div> -->
        </div>
      </div>
    </div>
    <!--侧边栏 TODO   -->
    <div class="panel-overlay"></div>
    <div class="panel panel-right panel-reveal" id="panel-left-demo">
      <div class="content-block">
        <p>
          <a href="/o2o/frontend/myrecord" class="close-panel">消费记录</a>
        </p>
        <p>
          <a href="/o2o/frontend/mypoint" class="close-panel">我的积分</a>
        </p>
        <p>
          <a href="/o2o/frontend/pointrecord" class="close-panel">积分兑换记录</a>
        </p>
        <!-- Click on link with "close-panel" class will close panel -->
      </div>
    </div>
  </div>
  <script type='text/javascript'
    src='//g.alicdn.com/sj/lib/zepto/zepto.min.js' charset='utf-8'></script>
  <script type='text/javascript'
    src='//g.alicdn.com/msui/sm/0.6.2/js/sm.min.js' charset='utf-8'></script>
  <script type='text/javascript'
    src='//g.alicdn.com/msui/sm/0.6.2/js/sm-extend.min.js' charset='utf-8'></script>
  <script type='text/javascript' src='../resources/js/frontend/index.js'
    charset='utf-8'></script>
</body>
</html>


index.js

$(function() {
  // 定义访问后台获取头条列表以及一级商铺类别列表的URL
    var url = '/o2o/frontend/listmainpage';
    // 访问后台获取头条列表以及一级商铺类别
    $.getJSON(url, function (data) {
        if (data.success) {
          // 定义变量,接收后台传递过来的头条列表数据
            var headLineList = data.headLineList;
            var swiperHtml = '';
            // 遍历头条列表,并拼接出轮播图组
            headLineList.map(function (item, index) {
                swiperHtml += ''
                            + '<div class="swiper-slide img-wrap">'
                            +      '<img class="banner-img" src="'+ item.lineImg +'" alt="'+ item.lineName +'">'
                            + '</div>';
            });
            // 将轮播图组赋值给前端HTML空间
            $('.swiper-wrapper').html(swiperHtml);
            // 设置轮播图轮换时间为1秒
            $(".swiper-container").swiper({
                autoplay: 1000,
                // 用户对轮播图进行操作时,是否自动停止autoplay
                autoplayDisableOnInteraction: false
            });
            // 获取后台传递过来的一级商铺类别列表
            var shopCategoryList = data.shopCategoryList;
            var categoryHtml = '';
            // 遍历台传递过来的一级商铺类别列表 拼接出col-50 两两一行的类别
            shopCategoryList.map(function (item, index) {
                categoryHtml += ''
                             +  '<div class="col-50 shop-classify" data-category='+ item.shopCategoryId +'>'
                             +      '<div class="word">'
                             +          '<p class="shop-title">'+ item.shopCategoryName +'</p>'
                             +          '<p class="shop-desc">'+ item.shopCategoryDesc +'</p>'
                             +      '</div>'
                             +      '<div class="shop-classify-img-warp">'
                             +          '<img class="shop-img" src="'+ item.shopCategoryImg +'">'
                             +      '</div>'
                             +  '</div>';
            });
            $('.row').html(categoryHtml);
        }
    });
    // 我的  
    $('#me').click(function () {
        $.openPanel('#panel-left-demo');
    });
    // 点击特定的分类
    $('.row').on('click', '.shop-classify', function (e) {
        var shopCategoryId = e.currentTarget.dataset.category;
        var newUrl = '/o2o/frontend/shoplist?parentId=' + shopCategoryId;
        window.location.href = newUrl;
    });
});


index.css

.index-banner {
    height: 35%;
    padding-bottom: 0.4rem;
}
.img-wrap {
    overflow: hidden;
}
.banner-img {
    width: 100%;
    height: 100%;
}
.total-shop-button {
    height: 1.5rem;
    line-height: 1.5rem;
    padding-left: 0.85rem;
    margin-bottom: 0.4rem;
    position: relative;
    cursor: pointer;
}
.total-shop-button:before {
    content: '';
    display: inline-block;
    position: absolute;
    left: 0;
    width: 0.15rem;
    height: 1.5rem;
    background-color: #0894ec;
}
.shop-classify {
    height: 3.3rem;
    padding: 0.2rem;
    cursor: pointer;
}
.shop-classify > .word {
    width: 65%;
    height: 100%;
    overflow: hidden;
    float: left;
}
.shop-classify > .word > p {
    margin: 0;
}
.shop-classify > .word > .shop-title {
    margin: 0;
    font-size: 0.8rem;
}
.shop-classify > .word > .shop-desc {
    margin: 0;
    font-size: 0.4rem;
}
// .shop-classify > .shop-img {
//     width: 2.4rem;
//     height: 2.4rem;
//     margin-left: 0.2rem;
//     display: inline-block;
// }
.shop-classify > .shop-classify-img-warp {
    width: 30%;
    height: 100%;
    margin-left: 0.2rem;
    display: inline-block;
}
.shop-classify > .shop-classify-img-warp > .shop-img {
    width: 100%;
    height: 100%;
}


Controller

package com.artisan.o2o.web.frontend;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/frontend")
public class FrontEndController {
  @RequestMapping(value = "/index" ,method = RequestMethod.GET)
  public String index(){
    return "frontend/index";
  }
}


调测


启动tomcat,根据路由规则,访问 http://localhost:8080/o2o/frontend/index



20180725211440429.gif


修复问题


页面雏形OK,从后台获取的数据也基本没有问题,但是图片没有显示,原因有2个

  • 图片地址不对
  • 前端解析映射的图片有问题


逐条来分析原因

我们先看下库表中的数据 ,涉及到的表

  • 头条信息 tb_head_line,
  • 商铺类别 tb_shop_category


select * from tb_shop_category a where a.parent_id is null ;

20180725212230182.png


select * from tb_head_line a  where a.enable_status = 1;

20180725212300256.png



模拟数据,我们先将数据修复为正确的数据。 因为我们还没有做头条信息和商铺类别的管理页面,我们这里先按照设计插入符合预期的数据信息。


头条图片展示修复

更新后的数据如下


20180725223728212.png


确保在本地磁盘上有这些对应名称的头条信息


20180725223811769.png


脚本如下

INSERT INTO `tb_head_line` VALUES (6, '购物', 'xxx', '\\upload\\item\\headtitle\\2018072520315746624.jpg', 99, 1, NULL, NULL);
INSERT INTO `tb_head_line` VALUES (2, '家具', 'x', '\\upload\\item\\headtitle\\2018072520371786788.jpg', 98, 1, NULL, NULL);
INSERT INTO `tb_head_line` VALUES (3, '健身', 'xx', '\\upload\\item\\headtitle\\2018072520393452772.jpg', 97, 1, NULL, NULL);
INSERT INTO `tb_head_line` VALUES (4, '美容', 'aa', '\\upload\\item\\headtitle\\2018072520400198256.jpg', 96, 1, NULL, NULL);
commit;


配置映射路径

tomcat的server.xml中增加如下信息


20180725224011423.png


<Context docBase="D:/o2o/image/upload" path="/upload"/>

20180725224032862.png


重新部署工程,先remove,然后在发布

20180725224123999.png


启动tomcat,重新访问 http://localhost:8080/o2o/frontend/index


20180725224242236.gif

头条信息展示正常。


一级类别商铺图片展示修复

同上,这里省略步骤

INSERT INTO `tb_shop_category` VALUES (1, '二手市场', '二手市场专区', '\\upload\\item\\shopcategory\\2018071523272255687.png', 9, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);
INSERT INTO `tb_shop_category` VALUES (2, '美容美发', '美容美发专区', '\\upload\\item\\shopcategory\\2018071523273314635.png', 8, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);
INSERT INTO `tb_shop_category` VALUES (3, '美食饮品', '美食饮品专区', '\\upload\\item\\shopcategory\\2018071523274213433.png', 7, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);
INSERT INTO `tb_shop_category` VALUES (4, '休闲娱乐', '休闲娱乐专区', '\\upload\\item\\shopcategory\\2018071523275121460.png', 6, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);
INSERT INTO `tb_shop_category` VALUES (5, '培训教育', '培训教育专区', '\\upload\\item\\shopcategory\\2018071523280082147.png', 5, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);
INSERT INTO `tb_shop_category` VALUES (6, '租赁市场', '租赁市场专区', '\\upload\\item\\shopcategory\\2018071523281361578.png', 4, '2018-7-27 16:32:50', '2018-7-27 16:32:50', NULL);


20180727163927318.png


Github地址

代码地址: https://github.com/yangshangwei/o2o

相关文章
|
1月前
|
存储 前端开发 JavaScript
前端状态管理:Vuex 核心概念与实战
Vuex 是 Vue.js 应用程序的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。本教程将深入讲解 Vuex 的核心概念,如 State、Getter、Mutation 和 Action,并通过实战案例帮助开发者掌握在项目中有效使用 Vuex 的技巧。
|
2月前
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
40 1
|
2月前
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
43 1
|
2月前
|
缓存 监控 前端开发
前端性能优化实战:从加载速度到用户体验
前端性能优化实战:从加载速度到用户体验
|
3月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
227 14
|
3月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
66 0
|
3月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
3月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
3月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
153 1
|
3月前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT

热门文章

最新文章

下一篇
开通oss服务