开发工具及技术
-
开发工具,Visual Studio 2022 -
数据库,SQL Server Management Studio 2012 -
开发框架,基于.Net 6.0的ASP.NET Core MVC -
前端框架,基于项目自带的bootstrap,jQuery等前端库。
页面布局

数据表设计

CREATE TABLE [dbo].[EB_Product]([Id] [bigint] IDENTITY(1,1) NOT NULL,[ShopId] [bigint] NULL,[Name] [varchar](100) NULL,[CategoryId] [bigint] NULL,[SubCategoryId] [bigint] NULL,[Price] [money] NULL,[Preferential] [numeric](18, 4) NULL,[PreferentialPrice] [money] NULL,[Description] [text] NULL,[Brand] [varchar](50) NULL,[BasicStyle] [varchar](50) NULL,[ProductStyle] [varchar](50) NULL,[Year] [varchar](50) NULL,[Season] [varchar](50) NULL,[Scenario] [varchar](50) NULL,[ImageUrl] [varchar](500) NULL,[CreateTime] [datetime] NULL,[CreateUser] [varchar](50) NULL,[LastEditTime] [datetime] NULL,[LastEditUser] [varchar](50) NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
商品实体创建
using SqlSugar;namespace EasyBuyShop.Models{[SugarTable("EB_Product")]public class Product : EntityModel{/// <summary>/// 店铺ID/// </summary>public long ShopId { get; set; }/// <summary>/// 产品名称/// </summary>public string Name { get; set; }/// <summary>/// 大类ID/// </summary>public long CategoryId { get; set; }/// <summary>/// 小类ID/// </summary>public long SubCategoryId { get; set; }/// <summary>/// 价格/// </summary>public decimal Price { get; set; }/// <summary>/// 打折后价格/// </summary>public decimal PreferentialPrice { get; set; }/// <summary>/// 品牌/// </summary>public string Brand { get; set; }/// <summary>/// 折扣/// </summary>public decimal Preferential { get; set; }public string Description { get; set; }/// <summary>/// 基础风格/// </summary>public string BasicStyle { get; set; }/// <summary>/// 产品风格/// </summary>public string ProductStyle { get; set; }/// <summary>/// 年份/// </summary>public string Year { get; set; }/// <summary>/// 季节/// </summary>public string Season { get; set; }/// <summary>/// 主要场景/// </summary>public string Scenario { get; set; }/// <summary>/// 主图片Url/// </summary>public string ImageUrl { get; set; }}}
数据处理层DAL
using EasyBuyShop.Models;using EasyBuyShop.Utils;namespace EasyBuyShop.DAL{public class ProductDal:BaseDal{/// <summary>/// 新品前100/// </summary>/// <returns></returns>public List<Product> GetTopNew100(){try{using (var db = this.GetDb(BaseDal.ConnStr)){return db.Queryable<Product>().OrderByDescending(r => r.Id).Take(100).ToList();}}catch (Exception ex){LogHelper.Fatal(ex.Message);return new List<Product>();}}/// <summary>/// 折扣Top3/// </summary>/// <returns></returns>public List<Product> GetTopDisCount3(){try{using (var db = this.GetDb(BaseDal.ConnStr)){return db.Queryable<Product>().OrderByDescending(r => r.Preferential).Take(3).ToList();}}catch (Exception ex){LogHelper.Fatal(ex.Message);return new List<Product>();}}}}
控制器获取
using EasyBuyShop.DAL;using EasyBuyShop.Models;using Microsoft.AspNetCore.Mvc;using System.Diagnostics;namespace EasyBuyShop.Controllers{public class HomeController : Controller{private readonly ILogger<HomeController> logger;public HomeController(ILogger<HomeController> logger){this.logger = logger;}public IActionResult Index(){CategoryDal categoryDal = new CategoryDal();SubCategoryDal subCategoryDal = new SubCategoryDal();ProductDal productDal = new ProductDal();var categories = categoryDal.GetCategories();var subCategories = subCategoryDal.GetSubCategories();var topNew100Product = productDal.GetTopNew100();var topDiscount3Product = productDal.GetTopDisCount3();ViewData["Categories"] = categories;ViewData["SubCategories"] = subCategories;ViewData["TopNew100"] = topNew100Product;ViewData["TopDiscount3"] = topDiscount3Product;var username = HttpContext.Session.GetString("username");var realName = HttpContext.Session.GetString("realname");ViewBag.Username = username;ViewBag.RealName = realName;return View();}}}
视图层呈现数据
<!-- banner style 2 start --><div class="banner-style-2 pt-100"><div class="container" style="margin-left:0px;margin-right:0px;padding-right:0px;padding-left:0px;"><div class="row">@foreach (var topDiscount in ViewData["TopDiscount3"] as List<Product>){<div class="col-md-4"><div class="banner-style-2-img mb-res"><img src="@topDiscount.ImageUrl" alt=""><div class="banner-style-2-dec"><h4>@topDiscount.Brand</h4><h3>降价 @(Math.Round( topDiscount.Preferential*100,0))% 销售</h3><a href="" onclick="javascript:buy(@(topDiscount.Id));return false;">购买</a><br></div></div><div class="shop-title f-left"><h3><a href="/Product/Detail/@(topDiscount.Id)">@topDiscount.Name</a></h3></div></div>}</div></div></div><!-- banner style 2 end -->
<!-- shop area start --><div class="portfolio-area pt-100 pb-70" style="padding-top:100px;padding-bottom:70px;"><div class="container"><div class="section-title text-center mb-50"><h2>新品爆款 <i class="fa fa-shopping-cart"></i></h2></div><div class="row portfolio-style-2"><div class="grid" style="position: relative; height: 100%;">@foreach (var topNewProduct in ViewData["TopNew100"] as List<Product>){<div class="col-md-3 col-sm-6 col-xs-12 mb-30"><div class="single-shop"><div class="shop-img"><a href="/Product/Detail/@(topNewProduct.Id)"><img src="@topNewProduct.ImageUrl" alt=""></a><div class="shop-quick-view"><a href="/Product/Detail/@(topNewProduct.Id)" data-toggle="modal" data-target="#quick-view" title="预览"><i class="pe-7s-look"></i></a></div><div class="price-up-down"><span class="sale-new">新品</span></div><div class="button-group"><a href="#" title="添加购物车" onclick="javascript:addCart(@(topNewProduct.Id));return false;"><i class="pe-7s-cart"></i>添加购物车</a><a class="wishlist" href="#" onclick="javascript:buy(@(topNewProduct.Id));return false;" title="立即购买"><i class="pe-7s-like"></i>立即购买</a></div></div><div class="shop-text-all"><div class="title-color fix"><div class="shop-title f-left"><h3><a href="/Product/Detail/@(topNewProduct.Id)">@topNewProduct.Name</a></h3></div><span class="price f-right"><span class="new">$@topNewProduct.PreferentialPrice</span></span></div><div class="fix"><span class="f-left">@(topNewProduct.BasicStyle) | @(topNewProduct.ProductStyle)</span></div></div></div></div>}</div></div></div></div><!-- shop area end -->
页面展示

