【Java实战】SSM到SpringBoot校园商铺全栈开发第6章:店铺编辑和列表功能

12 篇文章 1 订阅
10 篇文章 2 订阅

 6-1 店铺信息编辑之Dao层开发

修改addShop方法

service层:

ShopExecution addShop(Shop shop,InputStream shopImgInputStream,String fileName);
@Override
	@Transactional
	public ShopExecution addShop(Shop shop, InputStream shopImgInputStream,String fileName) {
		//空值判断
		if (shop == null) {
			return new ShopExecution(ShopStateEnum.NULL_SHOPID);
		}
		try {
			//给店铺信息赋初始值
			shop.setEnableStatus(0);
			shop.setCreateTime(new Date());
			shop.setLastEditTime(new Date());
			//添加店铺信息
			int effectedNum = shopDao.insertShop(shop);

			if (effectedNum <= 0) {
				throw new RuntimeException("店铺创建失败");
			} else {
				if (shopImgInputStream != null&&fileName!=null) {
					//存储图片
					try {
						addShopImg(shop, shopImgInputStream,fileName);
					} catch (Exception e) {
						throw new RuntimeException("addShopImg error:" + e.getMessage());
					}
					//更新店铺的图片地址
					effectedNum = shopDao.updateShop(shop);
					if (effectedNum <= 0) {
						throw new RuntimeException("更新图片地址失败");
					}
				}
			}
		} catch (Exception e) {
			throw new RuntimeException("addShop error:" + e.getMessage());
		}
		// 创建成功
		return new ShopExecution(ShopStateEnum.CHECK, shop);
	}

	private void addShopImg(Shop shop, InputStream shopImgInputStream,String fileName) {
		//获取店铺图片存储相对路径
		String target = PathUtil.getShopImagePath(shop.getShopId());
		//创建目标图片缩略图,返回相对地址
		String shopImgAddr = ImageUtil.generateThumbnail(shopImgInputStream, fileName,target);
		shop.setShopImg(shopImgAddr);
	}

ImageUtil:

public static String generateThumbnail(InputStream thumbnailInputStream, String fileName, String targetAddr){
		//随机生成文件名
		String realFileName = getRandomFileName();

		//获取图片扩展名
		String extension = getFileExtension(fileName);
		
		//创建目标目录路径
		makeDirPath(targetAddr);

		//目标图片相对路径名
		String relativeAddr = targetAddr+realFileName+extension;
		File dest = new File(PathUtil.getImgBasePath()+relativeAddr);

		//创建缩略图
		try {
			Thumbnails.of(thumbnailInputStream).size(200, 200)//设置大小
			.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(basePath+"/watermark.png")),0.25f)//指定水印位置、图源、透明度
			.outputQuality(0.8f).toFile(dest);//压缩图片、图片全路径
		} catch (IOException e) {
			e.printStackTrace();
		}
		return relativeAddr;
	}

  在ShopDao.java中添加:


/**
 * 通过shop id查询店铺
 * @param shopId 1
 * @return: com.doit.o2o.entity.Shop
 * @author: gefeng
 * @date: 2021/3/17 17:09
 */
Shop queryByShopId(long shopId);

 在ShopDao.xml中添加:

<resultMap id="shopMap" type="com.doit.o2o.entity.Shop">
		<id column="shop_id" property="shopId"></id>
		<result column="shop_name" property="shopName"></result>
		<result column="shop_desc" property="shopDesc"></result>
		<result column="shop_addr" property="shopAddr"></result>
		<result column="phone" property="phone"></result>
		<result column="shop_img" property="shopImg"></result>
		<result column="priority" property="priority"></result>
		<result column="create_time" property="createTime"></result>
		<result column="last_edit_time" property="lastEditTime"></result>
		<result column="enable_status" property="enableStatus"></result>
		<result column="advice" property="advice"></result>
		<association column="area_id" property="area" javaType="com.doit.o2o.entity.Area">
			<id column="area_id" property="areaId"></id>
			<result column="area_name" property="areaName"></result>
		</association>
		<association column="owner_id" property="owner" javaType="com.doit.o2o.entity.PersonInfo">
			<id column="user_id" property="userId"></id>
			<result column="name" property="name"></result>
		</association>
		<association column="shop_category_id" property="shopCategory" javaType="com.doit.o2o.entity.ShopCategory">
			<id column="shop_category_id" property="shopCategoryId"></id>
			<result column="shop_category_name" property="shopCategoryName"></result>
		</association>
	</resultMap>
	<select id="queryByShopId" resultMap="shopMap" parameterType="Long">
		SELECT s.shop_id,s.shop_name,s.shop_desc,s.shop_addr,s.phone,s.shop_img,s.priority,
		s.create_time,s.last_edit_time,s.enable_status,s.advice,
		pi.user_id,a.area_id,a.area_name,sc.shop_category_id,sc.shop_category_name
		FROM tb_shop s,tb_area a,tb_shop_category sc,tb_person_info pi
		WHERE s.area_id = a.area_id
		AND s.shop_category_id = sc.shop_category_id
		AND s.owner_id = pi.user_id
		AND s.shop_id = #{shopId}
	</select>

 6-2 店铺信息编辑之Service层的实现

/**
 * 更新店铺信息,包括对图片的处理
 * @param shop 1
 * @param shopImgInputStream 2
 * @param fileName 3
 * @return: com.doit.o2o.dto.ShopExecution
 * @author: gefeng
 * @date: 2021/3/18 16:26
 */
ShopExecution modifyShop(Shop shop, InputStream shopImgInputStream,String fileName);
@Override
	public ShopExecution modifyShop(Shop shop, InputStream shopImgInputStream,String fileName) throws ShopOperationException{
		//1.判断是否需要处理图片
		if (shop == null || shop.getShopId() == null) {
			return new ShopExecution(ShopStateEnum.NULL_SHOPID);
		} else {
			try {
				if (shopImgInputStream != null&&fileName!=null) {
					Shop tempShop = shopDao.queryByShopId(shop.getShopId());
					String tempShopImg = tempShop.getShopImg();
					if (tempShopImg != null) {
						//先删除原图片文件
						FileUtil.deleteFileOrPath(tempShopImg);
					}
					//2.更新店铺图片信息
					addShopImg(shop, shopImgInputStream,fileName);
				}
				shop.setLastEditTime(new Date());
				int effectedNum = shopDao.updateShop(shop);
				if (effectedNum <= 0) {
					return new ShopExecution(ShopStateEnum.INNER_ERROR);
				} else {// 创建成功
					shop = shopDao.queryByShopId(shop.getShopId());
					return new ShopExecution(ShopStateEnum.SUCCESS, shop);
				}
			}catch (Exception e) {
				throw new ShopOperationException("modifyShop error: "
						+ e.getMessage());
			}
		}
	}

 6-3 店铺信息编辑之Controller层实现

@RequestMapping(value = "/getshopbyid",method = RequestMethod.GET)
	@ResponseBody
	private Map<String,Object> getShopById(HttpServletRequest request){
		Map<String,Object> modelMap = new HashMap<String,Object>();
		Long shopId = HttpServletRequestUtil.getLong(request,"shopId");
		if(shopId>-1){
			try {
				Shop shop = shopService.getByShopId(shopId);
				List<Area> areaList = areaService.getAreaList();
				modelMap.put("shop", shop);
				modelMap.put("areaList", areaList);
				modelMap.put("success", true);
			}catch (Exception e){
				modelMap.put("success", false);
				modelMap.put("errMsg", e.toString());
			}
		}else{
			modelMap.put("success", false);
			modelMap.put("errMsg","empty shopId");
		}
		return modelMap;
	}
	
	@RequestMapping(value="/modifyshop",method = RequestMethod.POST)
	@ResponseBody
	private Map<String,Object> modifyShop(HttpServletRequest request){
		Map<String,Object> modelMap = new HashMap<String,Object>();
		//检查验证码是否正确
		if (!CodeUtil.checkVerifyCode(request)) {
			modelMap.put("success", false);
			modelMap.put("errMsg", "输入了错误的验证码");
			return modelMap;
		}
		//1.接受并转化相应的参数,包括店铺信息以及图片信息
		//获取request中shopStr参数的值
		String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
		ObjectMapper mapper = new ObjectMapper();
		Shop shop = null;
		try { 
			//将shopStr字符串解析为Shop类实例
			shop = mapper.readValue(shopStr, Shop.class);
		} catch (Exception e) {
			modelMap.put("success",false);
			modelMap.put("errMsg", e.getMessage());
			return modelMap;
		} 
		
		CommonsMultipartFile shopImg = null;

		//new一个对request会话上下文的CommonsMultipart的解析器
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

		//解析request
		if(commonsMultipartResolver.isMultipart(request)){
			//对request做强制类型转换
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;

			//从request中获取key为shopImg表示的File,并转换为CommonsMultipartFile类型
			shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
		}
		//2.注册店铺信息
		if(shop!=null&&shop.getShopId()!=null){
			PersonInfo owner = new PersonInfo();
			owner.setUserId(1L);
			shop.setOwner(owner);
			ShopExecution se=null;
			try{
				if(shopImg==null){
					se = shopService.modifyShop(shop, null, null);
				}else{
					se = shopService.modifyShop(shop, shopImg.getInputStream(), shopImg.getOriginalFilename());
				}
				if(se.getState()==ShopStateEnum.SUCCESS.getState()){
					modelMap.put("success", true);
				}else{
					modelMap.put("success", false);
					modelMap.put("errMsg", se.getStateInfo());
				}
			}catch (ShopOperationException e){
				e.printStackTrace();
			}catch (IOException e){
				e.printStackTrace();
			}
			
			return modelMap;
		}else{
			modelMap.put("success",false);
			modelMap.put("errMsg", "请输入店铺Id");
			return modelMap;
		}
		
	}

 修改registerShop方法。

1.从session中的登录的“user”属性获取owner。在web开发中,服务器可以为每个用户浏览器创建一个会话对象,即session,一个浏览器独占一个session对象,因此在需要保存用户数据时,服务器程序可以把用户信息写到用户浏览器独占的session中。当用户使用浏览器访问服务器程序时,服务器程序可以从用户的session中取出该用户的数据为用户服务。服务器创建session出来后,会把session的ID号以cookie的形式回写给客户机,这样只要客户端的浏览器不关,再去访问服务器的时候,都会带着session的ID号,服务器发现客户端请求带有session ID,就会使用内容中与之对应的session为之服务。Tomcat默认session过期时间:30分钟。

2.成功注册店铺后,更新该用户可以操作的店铺列表。

@RequestMapping(value="/registershop",method = RequestMethod.POST)
	@ResponseBody
	private Map<String,Object> registerShop(HttpServletRequest request){
		Map<String,Object> modelMap = new HashMap<String,Object>();
		//检查验证码是否正确
		if (!CodeUtil.checkVerifyCode(request)) {
			modelMap.put("success", false);
			modelMap.put("errMsg", "输入了错误的验证码");
			return modelMap;
		}
		//1.接受并转化相应的参数,包括店铺信息以及图片信息
		//获取request中shopStr参数的值
		String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
		ObjectMapper mapper = new ObjectMapper();
		Shop shop = null;
		try {
			//将shopStr字符串解析为Shop类实例
			shop = mapper.readValue(shopStr, Shop.class);
		} catch (Exception e) {
			modelMap.put("success",false);
			modelMap.put("errMsg", e.getMessage());
			return modelMap;
		} 
		
		CommonsMultipartFile shopImg = null;

		//new一个对request会话上下文的CommonsMultipart的解析器
		CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());

		//解析request
		if(commonsMultipartResolver.isMultipart(request)){
			//对request做强制类型转换
			MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;

			//从request中获取key为shopImg表示的File,并转换为CommonsMultipartFile类型
			shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
		}else{
			modelMap.put("success",false);
			modelMap.put("errMsg", "上传图片不能为空");
			return modelMap;
		}

		//2.注册店铺
		if(shop!=null&&shopImg!=null){
			PersonInfo owner = (PersonInfo) request.getSession().getAttribute("user");
//			owner.setUserId(1L);
			shop.setOwner(owner);
//			File shopImgFile = new File(PathUtil.getImgBasePath()+ImageUtil.getRandomFileName());
//			try {
//				shopImgFile.createNewFile();
//			} catch (IOException e) {
//				modelMap.put("success",false);
//				modelMap.put("errMsg", e.getMessage());
//				return modelMap;
//			}
			ShopExecution se=null;
			try{
				se = shopService.addShop(shop, shopImg.getInputStream(),shopImg.getOriginalFilename());
			}catch (ShopOperationException e){
				e.printStackTrace();
			}catch (IOException e){
				e.printStackTrace();
			}
			if(se.getState()==ShopStateEnum.CHECK.getState()){
				modelMap.put("success", true);
				
				@SuppressWarnings("unchecked")
				List<Shop> shopList = (List<Shop>) request.getSession().getAttribute("shopList");
				if(shopList==null||shopList.size()==0){
					shopList = new ArrayList<Shop>();
				}
				shopList.add(se.getShop());
				request.getSession().setAttribute("shopList", shopList);
			}else{
				modelMap.put("success", false);
				modelMap.put("errMsg", se.getStateInfo());
			}
			return modelMap;
		}else{
			modelMap.put("success",false);
			modelMap.put("errMsg", "请输入店铺信息");
			return modelMap;
		}
		
	}

 6-4 店铺信息编辑之前端实现 

/**
 * 
 */
$(function(){
	var shopId = getQueryString('shopId');
	var isEdit = shopId?true:false;
    //获取店铺初始信息的url
	var initUrl = '/o2o/shopadmin/getshopinitinfo';
    //注册店铺的url
	var registerShopUrl = '/o2o/shopadmin/registershop';
	//根据shopId获取店铺信息的url
	var shopInfoUrl = "o2o/shopadmin/getshopbyid?shopId="+shopId;
	var editShopUrl = '/o2o/shopadmin/modifyshop';
	if(!isEdit){
        alert(initUrl);
        getShopInitInfo();
    }else{
		getShopInfo();
	}

    function getShopInfo(shopId) {
        $.getJSON(shopInfoUrl, function(data) {
            if (data.success) {
                var shop = data.shop;
                $('#shop-name').val(shop.shopName);
                $('#shop-addr').val(shop.shopAddr);
                $('#shop-phone').val(shop.phone);
                $('#shop-desc').val(shop.shopDesc);
                var shopCategory = '<option data-id="'
                    + shop.shopCategory.shopCategoryId + '" selected>'
                    + shop.shopCategory.shopCategoryName + '</option>';
                var tempAreaHtml = '';
                data.areaList.map(function(item, index) {
                    tempAreaHtml += '<option data-id="' + item.areaId + '">'
                        + item.areaName + '</option>';
                });
                $('#shop-category').html(shopCategory);
                $('#shop-category').attr('disabled','disabled');
                $('#area').html(tempAreaHtml);
                $("#area option[data-id='"+shop.area.areaId+"']").attr("selected","selected");
            }
        });
    }

	function getShopInitInfo() {
        $.getJSON(initUrl, function (data) {
            if (data.success) {
                var tempHtml = '';
                var tempAreaHtml = '';
                data.shopCategoryList.map(function (item, index) {
                    tempHtml += '<option data-id="' + item.shopCategoryId
                        + '">' + item.shopCategoryName + '</option>';
                });
                data.areaList.map(function (item, index) {
                    tempAreaHtml += '<option data-id="' + item.areaId + '">'
                        + item.areaName + '</option>';
                });
                $('#shop-category').html(tempHtml);
                $('#area').html(tempAreaHtml);
            }
        });
    }
	
	$('#submit').click(function() {
		var shop = {};
		if(isEdit){
			shop.shopId = shopId;
		}
		shop.shopName = $('#shop-name').val();
		shop.shopAddr = $('#shop-addr').val();
		shop.phone = $('#shop-phone').val();
		shop.shopDesc = $('#shop-desc').val();

		shop.shopCategory = {
			shopCategoryId : $('#shop-category').find('option').not(function() {
				return !this.selected;
			}).data('id')
		};
		shop.area = {
			areaId : $('#area').find('option').not(function() {
				return !this.selected;
			}).data('id')
		};

		var shopImg = $("#shop-img")[0].files[0];
		var formData = new FormData();
		formData.append('shopImg', shopImg);
		formData.append('shopStr', JSON.stringify(shop));

		var verifyCodeActual = $('#j_captcha').val();
		if (!verifyCodeActual) {
			$.toast('请输入验证码!');
			return;
		}
		formData.append("verifyCodeActual", verifyCodeActual);
		$.ajax({
			url : (isEdit?editShopUrl:registerShopUrl),
			type : 'POST',
			// contentType: "application/x-www-form-urlencoded; charset=utf-8",
			data : formData,
			contentType : false,
			processData : false,
			cache : false,
			success : function(data) {
				if (data.success) {
					$.toast('提交成功!');
				} else {
					$.toast('提交失败!'+data.errMsg);
					$('#captcha_img').click();
				}
			}
		});
	});
})

 6-5 店铺列表展示之Dao层的实现

/**
	 * 分页查询店铺,可输入的条件有:店铺名(模糊),店铺状态,店铺类别,区域Id,owner
	 * Param注解用于表示函数的参数
	 * @param shopCondition
	 * @param rowIndex 从第几行开始取数据
	 * @param pageaSize 返回的条数
	 * @return
	 */
	List<Shop> queryShopList(@Param("shopCondition")Shop shopCondition,@Param("rowIndex")int rowIndex,
			@Param("pageSize")int pageaSize);
	
	/**
	 * 返回queryShopList结果总数
	 * @param shopCondition
	 * @return
	 */
	int queryShopCount(@Param("shopCondition")Shop shopCondition);

 

<select id="queryShopList" resultMap="shopMap" >
		SELECT
		s.shop_id,s.shop_name,s.shop_desc,s.shop_addr,s.phone,s.shop_img,s.priority,
		s.create_time,s.last_edit_time,s.enable_status,s.advice,
		pi.user_id,a.area_id,a.area_name,sc.shop_category_id,sc.shop_category_name
		FROM tb_shop s,tb_area a,tb_shop_category sc,tb_person_info pi
		<where>
			<!-- 写like语句的时候 一般都会写成 like '% %' 在mybatis里面写就是应该是 like '%${name} %' 而不是 
				'%#{name} %' ${name} 是不带单引号的,而#{name} 是带单引号的 -->
			<if test="shopCondition.shopName != null">
				and s.shop_name like '%${shopCondition.shopName}%'
			</if>
			<if test="shopCondition.enableStatus != null">
				and s.shop_status = #{shopCondition.enableStatus}
			</if>
			<if test="shopCondition.shopCategory != null and 
			shopCondition.shopCategory.shopCategoryId != null">
				and s.shop_category_id = #{shopCondition.shopCategory.shopCategoryId}
			</if>
			<if test="shopCondition.area != null and 
			shopCondition.area.areaId != null">
				and s.area_id = #{shopCondition.area.areaId}
			</if>
			<if test="shopCondition.owner != null and 
			shopCondition.owner.userId != null">
				and pi.user_id = #{shopCondition.owner.userId}
			</if>
			AND s.area_id = a.area_id
			AND s.shop_category_id = sc.shop_category_id
			AND s.owner_id = pi.user_id
		</where>
		ORDER BY s.priority DESC
		LIMIT #{rowIndex},#{pageSize};
	</select>
	
	<select id="queryShopCount" resultType="int" >
		SELECT
		count(1)
		FROM tb_shop s,tb_area a,tb_shop_category sc,tb_person_info pi
		<where>
			<!-- 写like语句的时候 一般都会写成 like '% %' 在mybatis里面写就是应该是 like '%${name} %' 而不是 
				'%#{name} %' ${name} 是不带单引号的,而#{name} 是带单引号的 -->
			<if test="shopCondition.shopName != null">
				and s.shop_name like '%${shopCondition.shopName}%'
			</if>
			<if test="shopCondition.enableStatus != null">
				and s.shop_status = #{shopCondition.enableStatus}
			</if>
			<if test="shopCondition.shopCategory != null and 
			shopCondition.shopCategory.shopCategoryId != null">
				and s.shop_category_id = #{shopCondition.shopCategory.shopCategoryId}
			</if>
			<if test="shopCondition.area != null and 
			shopCondition.area.areaId != null">
				and s.area_id = #{shopCondition.area.areaId}
			</if>
			<if test="shopCondition.owner != null and 
			shopCondition.owner.userId != null">
				and pi.user_id = #{shopCondition.owner.userId}
			</if>
			AND s.area_id = a.area_id
			AND s.shop_category_id = sc.shop_category_id
			AND s.owner_id = pi.user_id
		</where>
	</select>

 6-6 店铺列表展示之Service层的实现

/**
 * 根据shopCondition分页返回相应店铺信息
 * @param shopCondition
 * @param pageIndex
 * @param pageSize
 * @return
 */
ShopExecution getShopList(Shop shopCondition,int pageIndex,int pageSize);

 

@Override
	public ShopExecution getShopList(Shop shopCondition, int pageIndex, int pageSize) {
		int rowIndex = PageCalculator.calculateRowIndex(pageIndex, pageSize);
		List<Shop> shopList = shopDao.queryShopList(shopCondition, rowIndex, pageSize);
		int count = shopDao.queryShopCount(shopCondition);
		ShopExecution se = new ShopExecution();
		if(shopList!=null){
			se.setShopList(shopList);
			se.setCount(count);
		}else{
			se.setState(ShopStateEnum.INNER_ERROR.getState());
		}
		return se;
	}

 6-7 店铺列表展示之Contoller层的实现 

/**
	 * 获取用户名下所有店铺
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/getshoplist",method = RequestMethod.GET)
	@ResponseBody
	private Map<String,Object> getShopList(HttpServletRequest request){
		Map<String,Object> modelMap = new HashMap<String,Object>();
		PersonInfo user = new PersonInfo();
		user.setUserId(1L);
		request.getSession().setAttribute("user", user);
		user = (PersonInfo) request.getSession().getAttribute("user");
		try{
			Shop shopCondition = new Shop();
			shopCondition.setOwner(user);
			ShopExecution se = shopService.getShopList(shopCondition, 0, 100);
			modelMap.put("success", true);
			modelMap.put("shopList", se.getShopList());
			modelMap.put("user", user);
		}catch (Exception e) {
			modelMap.put("success", false);
			modelMap.put("errMsg", e.getMessage());
		}
		return modelMap;
	}
	
	
	/**
	 * 直接访问该页面且未经登录或未经店铺列表页面链接而访问,则对其重定向到shoplist页面
	 * @param request
	 * @return
	 */
	@RequestMapping(value="/getshopmanagementinfo",method = RequestMethod.GET)
	@ResponseBody
	private Map<String,Object> getShopManagementInfo(HttpServletRequest request){
		Map<String,Object> modelMap = new HashMap<String,Object>();
		//从请求中获取shopId
		long shopId = HttpServletRequestUtil.getLong(request, "shopId");
		
		if(shopId<=0){
			//请求中没有shopId,尝试从session中获取当前shop
			Object currentShopObj = request.getSession().getAttribute("currentShop");
			//session中没获取到当前shop
			if(currentShopObj==null){
				modelMap.put("redirect",true);
				modelMap.put("url", "o2o/shopadmin/shoplist");
			}else{//session中获取到了当前shop
				Shop currentShop = (Shop)currentShopObj;
				modelMap.put("redirect", false);
				modelMap.put("shopId", currentShop.getShopId());
			}
		}else{
			Shop currentShop = new Shop();
			currentShop.setShopId(shopId);
			request.getSession().setAttribute("currentShop", currentShop);
			modelMap.put("redirect", false);
		}
		return modelMap;
	}

 6-8 店铺列表展示前端开发 

new html/shop/shoplist.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="/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/shop/shoplist.css">
    </head>
<body>
    <header class="bar bar-nav">
        <h1 class="title">商店列表</h1>
    </header>
    <div class="content">
        <div class="content-block">
        	<p>你好,<span id="user-name"></span><a class="pull-right" href="/o2o/shopadmin/shopoperation">增加店铺</a>
        	</p>
            <div class="row row-shop">
                <div class="col-40">商店名称</div>
                <div class="col-40">状态</div>
                <div class="col-20">操作</div>
            </div>
            <div class="shop-wrap">

            </div>
        </div>
        <div class="content-block">
			<div class="row">
				<div class="col-50">
					<a href="" id="log-out"
						class="button button-big button-fill button-danger">退出系统</a>
				</div>
                <div class="col-50">
                    <a href="/o2o/shop/changepsw" class="button button-big button-fill button-success">修改密码</a>
                </div>
			</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/common/common.js'
		charset='utf-8'></script>
    <script type='text/javascript' src='../resources/js/shop/shoplist.js' charset='utf-8'></script>
</body>
</html>

new css/shop/shoplist.css

.row-shop {
    border: 1px solid #999;
    padding: .5rem;
    border-bottom: none;
}
.row-shop:last-child {
    border-bottom: 1px solid #999;
}
.shop-name {
    white-space: nowrap;
    overflow-x: scroll;
}
.shop-wrap a {

}

new js/shop/shoplist.js

$(function () {
	getlist();
	
	function getlist(e){
		$.ajax({
			url:"/o2o/shopadmin/getshoplist",
			type:"get",
			dataType:"json",
			success:function(data){
				if(data.success){
					handleList(data.shopList);
					handleUser(data.user);
				}
			}
		});
	}
	
	function handleUser(data) {
		$('#user-name').text(data.name);
	}

	function handleList(data) {
		var html = '';
		data.map(function (item, index) {
			html += '<div class="row row-shop"><div class="col-40">'+ item.shopName +'</div><div class="col-40">'+ shopStatus(item.enableStatus) +'</div><div class="col-20">'+ goShop(item.enableStatus, item.shopId) +'</div></div>';

		});
		$('.shop-wrap').html(html);
	}
	
	function shopStatus(status) {
		if (status == 0) {
			return '审核中';
		} else if (status == -1) {
			return '店铺非法';
		} else {
			return '审核通过';
		}
	}
	
	function goShop(status, id) {
		if (status != 0 && status != -1) {
			return '<a href="/o2o/shopadmin/shopmanagement?shopId='+ id +'">进入</a>';
		} else {
			return '';
		}
	}
	
	
});

   6-9 店铺管理页面的前端开发 

new html/shop/shopmanagement.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="/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/shop/shopmanagement.css">
    </head>
<body>
    <header class="bar bar-nav">
        <h1 class="title">商店管理</h1>
    </header>
    <div class="content">
        <div class="content-block">
            <div class="row">
                <div class="col-50 mb">
                    <a href="/o2o/shopadmin/shopoperation" class="button button-big button-fill">商铺信息</a>
                </div>
                <div class="col-50 mb">
                    <a href="/o2o/shopadmin/productmanagement" class="button button-big button-fill">商品管理</a>
                </div>
                <div class="col-50 mb">
                    <a href="/o2o/shopadmin/productcategorymanagement" class="button button-big button-fill">类别管理</a>
                </div>
                <div class="col-100 mb">
                    <a href="/o2o/shopadmin/shoplist" class="button button-big button-fill button-danger">返回</a>
                </div>
            </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/common/common.js'
		charset='utf-8'></script>
    <script type='text/javascript' src='../resources/js/shop/shopmanagement.js' charset='utf-8'></script>
</body>
</html>

new css/shop/shopmanagement.css

.mb {
    margin-bottom: .5rem;
}

new js/shop/shopmanagement.js

$(function(){
	var shopId = getQueryString("shopId");getQueryString
	var shopInfoUrl = '/o2o/shopadmin/getshopmanagementinfo?shopId='+shopId;
	$.getJSON(shopInfoUrl,function(data){
		if(data.redirect){
			window.location.href=data.url;
		}else{
			if(data.shopId!=undefined && data.shopId != null){
				shopId = data.shopId;
			}
			$('#shopInfo').attr('href','/o2o/shopadmin/shopoperation?shopId='+shopId);
		}
	});
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值