lisy
2023-08-18 846e51ef297b83be2f79ef11a1a2c56150c55012
管理后台:积分商品的详情模块
6个文件已修改
10个文件已添加
688 ■■■■■ 已修改文件
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseCity.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseCityMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/response/GoodsInfoOneVo.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/response/StoreVos.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseCityService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseCityServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/PointsMerchandiseCityMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GoodsInfoOneVo.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/StoreVos.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -13,6 +13,8 @@
import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
import com.dsh.activity.model.PointMerchandiseVo;
import com.dsh.activity.model.request.*;
import com.dsh.activity.model.response.GoodsInfoOneVo;
import com.dsh.activity.model.response.StoreVos;
import com.dsh.activity.service.*;
import com.dsh.activity.util.GDMapGeocodingUtil;
import com.dsh.activity.util.StrUtils;
@@ -70,6 +72,9 @@
    @Resource
    private CouponCityService ccityService;
    @Resource
    private PointsMerchandiseCityService pmdsCityService;
    @ResponseBody
@@ -744,4 +749,96 @@
        }
    }
    @PostMapping("/base/pointMerchars/queryDetailsOfGoods")
    public GoodsInfoOneVo queryDetailsOfGoods(@RequestBody Integer id){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        GoodsInfoOneVo infoOneVo = new GoodsInfoOneVo();
        PointsMerchandise byId = pmdsService.getById(id);
        if (ToolUtil.isNotEmpty(byId)){
            infoOneVo.setName(byId.getName());
            infoOneVo.setCover(byId.getCover());
            infoOneVo.setPics(byId.getProductImages());
            infoOneVo.setPrice(byId.getPrice());
            infoOneVo.setExchangeMethod(byId.getRedemptionMethod());
            switch (byId.getRedemptionMethod()){
                case 1:
                    infoOneVo.setIntegral(byId.getIntegral());
                    break;
                case 2:
                    infoOneVo.setIntegral(byId.getIntegral());
                    infoOneVo.setCash(byId.getCash());
                    break;
                case 3:
                    infoOneVo.setCash(byId.getCash());
                    break;
                default:
                    break;
            }
            switch (byId.getUserPopulation()){
                case 1:
                    infoOneVo.setUserPopulation("全部用户");
                    break;
                case 2:
                    infoOneVo.setUserPopulation("年度会员");
                    break;
                case 3:
                    infoOneVo.setUserPopulation("已有学员用户");
                    break;
                default:
                    break;
            }
            infoOneVo.setQuantityIssued(byId.getQuantityIssued());
            List<UserPointsMerchandise> list = upmseService.list(new LambdaQueryWrapper<UserPointsMerchandise>()
                    .eq(UserPointsMerchandise::getPointsMerchandiseId,byId.getId()));
            infoOneVo.setUseScope(byId.getUseScope());
            switch (byId.getUseScope()){
                case 1:
                    infoOneVo.setExchangeArea("全国通用");
                    break;
                case 2:
                    infoOneVo.setExchangeArea("指定城市");
                    break;
                case 3:
                    infoOneVo.setExchangeArea("指定门店");
                    break;
                default:
                    break;
            }
            infoOneVo.setHasPicked(list.size());
            infoOneVo.setPickUpQuantity(byId.getPickUpQuantity());
            infoOneVo.setValidTime(simpleDateFormat.format(byId.getStartTime())+"至"+ simpleDateFormat.format(byId.getEndTime()));
            infoOneVo.setRedemptionInstructions(byId.getRedemptionInstructions());
            infoOneVo.setSort(byId.getSort());
        }
        return infoOneVo;
    }
    @ResponseBody
    @PostMapping("/base/pointMerchars/getStoreList")
    public List<StoreVos> getStoreList(@RequestBody Integer id){
        List<StoreVos> storeVos = new ArrayList<>();
        List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>()
                .eq("pointsMerchandiseId",id));
        // TODO: 2023/8/18 查询城市
        return storeVos;
    }
    @ResponseBody
    @PostMapping("/base/pointMerchars/getProvinces")
    public List<StoreVos> getProvinces(@RequestBody Integer id){
        List<StoreVos> storeVos = new ArrayList<>();
        List<PointsMerchandiseCity> list = pmdsCityService.list(new LambdaQueryWrapper<PointsMerchandiseCity>()
                .eq(PointsMerchandiseCity::getPointsMerchandiseId,id));
        // TODO: 2023/8/18 查询门店
        return storeVos;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseCity.java
New file
@@ -0,0 +1,67 @@
package com.dsh.activity.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 积分商品使用门店关系数据
 * </p>
 *
 * @author jqs
 * @since 2023-07-12
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_points_merchandise_city")
public class PointsMerchandiseCity extends Model<PointsMerchandiseCity> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 积分商品id
     */
    @TableField("pointsMerchandiseId")
    private Integer pointsMerchandiseId;
    /**
     *
     */
    @TableField("city")
    private String city;
    /**
     *
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     *
     */
    @TableField("province")
    private String province;
    /**
     *
     */
    @TableField("provinceCode")
    private String provinceCode;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseCityMapper.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.PointsMerchandiseCity;
/**
 * <p>
 * 积分商品使用门店关系数据 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-12
 */
public interface PointsMerchandiseCityMapper extends BaseMapper<PointsMerchandiseCity> {
}
cloud-server-activity/src/main/java/com/dsh/activity/model/response/GoodsInfoOneVo.java
New file
@@ -0,0 +1,78 @@
package com.dsh.activity.model.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GoodsInfoOneVo {
    String name;
    /**
     * 封面图
     */
    String cover;
    /**
     * 原价
     */
    BigDecimal price;
    /**
     * 兑换方式(1=积分,2=现金+积分, 3=现金)
     */
    Integer exchangeMethod;
    /**
     * 现金
     */
    BigDecimal cash;
    /**
     * 积分
     */
    Integer integral;
    /**
     * 图片
     */
    String pics;
    /**
     * 用户人群
     */
    String userPopulation;
    /**
     * 发放数量
     */
    Integer quantityIssued;
    /**
     * 已领数量
     */
    Integer hasPicked;
    /**
     * 限领数量
     */
    Integer pickUpQuantity;
    /**
     * 有效期
     */
    String validTime;
    /**
     * 兑换地点
     */
    String exchangeArea;
    /**
     * 兑换地点 (1=全国,2=指定城市,3=指定门店)
     */
    Integer useScope;
    /**
     * 商品说明
     */
    String redemptionInstructions;
    /**
     * 排序
     */
    Integer sort;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/response/StoreVos.java
New file
@@ -0,0 +1,18 @@
package com.dsh.activity.model.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StoreVos {
    String num1;
    String num2;
    String num3;
}
cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseCityService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.PointsMerchandiseCity;
/**
 * <p>
 * 积分商品使用门店关系数据 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-12
 */
public interface PointsMerchandiseCityService extends IService<PointsMerchandiseCity> {
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseCityServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.dsh.activity.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.PointsMerchandiseCity;
import com.dsh.activity.mapper.PointsMerchandiseCityMapper;
import com.dsh.activity.service.PointsMerchandiseCityService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 积分商品使用门店关系数据 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-12
 */
@Service
public class PointsMerchandiseCityServiceImpl extends ServiceImpl<PointsMerchandiseCityMapper, PointsMerchandiseCity> implements PointsMerchandiseCityService {
}
cloud-server-activity/src/main/resources/mapper/PointsMerchandiseCityMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.activity.mapper.PointsMerchandiseCityMapper">
</mapper>
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/PointMercharsClient.java
@@ -5,6 +5,8 @@
import com.dsh.course.feignClient.activity.model.IntegralGoodsOfSearch;
import com.dsh.course.feignClient.activity.model.PointMercharsPayedVo;
import com.dsh.course.feignClient.activity.model.PointMercharsVo;
import com.dsh.guns.modular.system.model.GoodsInfoOneVo;
import com.dsh.guns.modular.system.model.StoreVos;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -34,4 +36,15 @@
    @PostMapping("/base/pointMerchars/updateGoodsDetail")
    boolean updateGoodsDetail(@RequestBody Map<String, Object> stringObjectHashMap);
    @PostMapping("/base/pointMerchars/queryDetailsOfGoods")
    GoodsInfoOneVo queryDetailsOfGoods(@RequestBody Integer id);
    @PostMapping("/base/pointMerchars/getStoreList")
    List<StoreVos> getStoreList(@RequestBody Integer id);
    @PostMapping("/base/pointMerchars/getProvinces")
    List<StoreVos> getProvinces(@RequestBody Integer id);
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TGoodsController.java
@@ -19,10 +19,7 @@
import com.dsh.guns.core.base.tips.SuccessTip;
import com.dsh.guns.core.common.constant.factory.PageFactory;
import com.dsh.guns.core.util.ToolUtil;
import com.dsh.guns.modular.system.model.CouponDataVo;
import com.dsh.guns.modular.system.model.Region;
import com.dsh.guns.modular.system.model.TCity;
import com.dsh.guns.modular.system.model.TStore;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.service.ICityService;
import com.dsh.guns.modular.system.service.IRegionService;
import com.dsh.guns.modular.system.service.IStoreService;
@@ -95,6 +92,19 @@
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        return PREFIX + "TGoods_add.html";
    }
    /**
     * 跳转到添加
     */
    @RequestMapping("/tGoods_info")
    public String tGoodsInfo(Model model) {
        Integer objectType = UserExt.getUser().getObjectType();
        System.out.println(objectType);
        model.addAttribute("userType",objectType);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        return PREFIX + "TGoods_detail_one.html";
    }
@@ -468,4 +478,29 @@
    }
    /**
     * 跳转到修改商品详情
     */
    @RequestMapping("/goods_info/{id}")
    public String goodsInfo(@PathVariable Integer id, Model model) {
        System.out.println("id:"+id);
        GoodsInfoOneVo infoOneVo = pointMercharsClient.queryDetailsOfGoods(id);
        System.out.println("pointMercharsVo:"+infoOneVo);
        model.addAttribute("item",infoOneVo);
        String[] split = infoOneVo.getPics().split(",");
        List<String> list = Arrays.asList(split);
        if (infoOneVo.getUseScope() == 2){
            List<StoreVos> provinces = pointMercharsClient.getProvinces(id);
            model.addAttribute("city",provinces);
        }
        if (infoOneVo.getUseScope() == 2){
            List<StoreVos> storeVos = pointMercharsClient.getStoreList(id);
            model.addAttribute("store",storeVos);
        }
        model.addAttribute("pictures",list);
        model.addAttribute("exchangeMethod",infoOneVo.getExchangeMethod());
        return PREFIX + "TGoods_detail_one.html";
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/GoodsInfoOneVo.java
New file
@@ -0,0 +1,78 @@
package com.dsh.guns.modular.system.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GoodsInfoOneVo {
    String name;
    /**
     * 封面图
     */
    String cover;
    /**
     * 原价
     */
    BigDecimal price;
    /**
     * 兑换方式(1=积分,2=现金+积分, 3=现金)
     */
    Integer exchangeMethod;
    /**
     * 现金
     */
    BigDecimal cash;
    /**
     * 积分
     */
    Integer integral;
    /**
     * 图片
     */
    String pics;
    /**
     * 用户人群
     */
    String userPopulation;
    /**
     * 发放数量
     */
    Integer quantityIssued;
    /**
     * 已领数量
     */
    Integer hasPicked;
    /**
     * 限领数量
     */
    Integer pickUpQuantity;
    /**
     * 有效期
     */
    String validTime;
    /**
     * 兑换点
     */
    String exchangeArea;
    /**
     * 兑换地点 (1=全国,2=指定城市,3=指定门店)
     */
    Integer useScope;
    /**
     * 商品说明
     */
    String redemptionInstructions;
    /**
     * 排序
     */
    Integer sort;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/StoreVos.java
New file
@@ -0,0 +1,18 @@
package com.dsh.guns.modular.system.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StoreVos {
    String num1;
    String num2;
    String num3;
}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_detail_one.html
New file
@@ -0,0 +1,207 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
        display: inline-block;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409eff;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 110px;
        margin-top: 40px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div id="b1">
                <#input id="name" name="*商品名称:" type="text" value="${item.name}" readonly="true" />
                <#input id="cover" name="*原价:" avatarImg="${item.price}" readonly="true" />
                <div class="form-group">
                    <label class="col-sm-3 control-label head-scu-label">*兑换方式:</label>
                    <div class="col-sm-4">
                        @if(exchangeMethod == 1){
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="1" checked style="margin-top: 10px" disabled/>
                        <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="2"  style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="3"  style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label>
                        @}
                        @if(exchangeMethod == 2){
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="1"  style="margin-top: 10px" disabled/>
                        <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="2"  checked style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="3"  style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label>
                        @}
                        @if(exchangeMethod == 3){
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="1"  style="margin-top: 10px" disabled/>
                        <label class="col-sm-1" style="margin-left: -15px;width: 16%;margin-top: 7px">全部用户</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="2"  style="margin-left: 5%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 16%;margin-top: 7px">年度会员</label>
                        <input class="col-sm-1 control-label" name="userGroup" type="radio"
                               value="3" checked  style="margin-left: 4%;margin-top: 10px;width: 13px;height: 13px" disabled/>
                        <label class="col-sm-1" style="width: 18%;margin-top: 5px">已有学员用户</label>
                        @}
                    </div>
                </div>
                <#input id="cover" name="*所需现金:" avatarImg="${item.cash}" readonly="true" />
                <#input id="cover" name="*所需积分:" avatarImg="${item.integral}" readonly="true" />
                <div class="form-group">
                    <label class="col-sm-3 control-label head-scu-label">*商品封面:</label>
                    <div class="col-sm-4">
                        <img height="100px" width="100px" src="${item.cover}">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label head-scu-label">*商品图片:</label>
                    <div class="col-sm-4">
                        @if(pictures != null){
                        @for(im in pictures){
                            <img  height="100px" width="100px" src="${im}">
                        @}
                        @}
                    </div>
                </div>
                <#input id="quantityIssued" name="*用户人群:" type="text" value="${item.userPopulation}" readonly="true" />
                <#input id="quantityIssued" name="*发放数量:" type="text" value="${item.quantityIssued}" readonly="true" />
                <#input id="quantityIssued" name="*限领数量:" type="text" value="${item.pickUpQuantity}" readonly="true" />
                <#input id="quantityIssued" name="*已兑换数量:" type="text" value="${item.hasPicked}" readonly="true" />
                <#input id="quantityIssued" name="*有效期:" type="text" value="${item.validTime}" readonly="true" />
                <#input id="quantityIssued" name="*兑换地点:" type="text" value="${item.exchangeArea}" readonly="true" />
                @if(item.useScope == 2){
                <table class="table table-bordered" style="width: 70%;margin-left: 228px;" >
                    <thead>
                    <tr>
                        <td>所在省市</td>
                        <td>所属账号</td>
                        <td>门店名称</td>
                    </tr>
                    </thead>
                    @for(s in store){
                    <td>${s.num1}</td>
                    <td>${s.num2}</td>
                    <td>${s.num3}</td>
                    @}
                </table>
                @}
                @if(item.useScope == 3){
                <table class="table table-bordered" style="width: 70%;margin-left: 228px;" >
                    <thead>
                    <tr>
                        <td>所在省市</td>
                        <td>所属账号</td>
                        <td>门店名称</td>
                    </tr>
                    </thead>
                    @for(c in city){
                    <td>${c.num1}</td>
                    <td>${c.num2}</td>
                    @}
                </table>
                @}
                <div class="form-group" style="margin-left:262px">
                    <label class="col-sm-3 control-label">兑换说明:</label>
                    <div class="col-sm-4">
                        <textarea type="text/plain" id="editor"  style="height: 300px;width: 800px;" readonly>${item.redemptionInstructions}</textarea>
                    </div>
                </div>
                <#input id="quantityIssued" name="*排序:" type="text" value="${item.sort}" readonly="true" />
            </div>
        </div>
    </div>
    <div class="row btn-group-m-t">
        <div class="col-sm-10 col-sm-offset-5">
            <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TGoodsInfoDlg.close()"/>
        </div>
    </div>
</div>
</div>
</div>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script src="${ctxPath}/modular/system/tGoods/tGoods_info.js"></script>
<script>
    var vue2 = new Vue({
        el: '#app',
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TGoodsInfoDlg.goodsPicArray.push(file.response);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TGoodsInfoDlg.goodsPicArray = TGoodsInfoDlg.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tGoods/TGoods_edit.html
@@ -54,14 +54,14 @@
                        <div class="form-group">
                            <label class="col-sm-3 control-label">商品图片(请上传不超过五张图片): </label>
                            <div class="col-sm-2" style="width: 100%;margin-left: 24%;margin-top: 1%">
                                <div class="avatar-uploader" style="display: flex;">
                                @for(im in pictures){
                                <div class="avatar-uploader" style="display: inline-block;">
                                    <div style="margin-right: 16px;position: relative">
                                    <img height="100px" width="100px" src="${im}">
                                    <i class="fa fa-close" onclick="delImg(this)" style="color: red;font-size: 18px;position: absolute;"></i>
                                        <i class="el-icon-delete" onclick="delImg(this)" style="color: red;font-size: 18px;position: absolute;left: 0;right: 0;top: 0;bottom: 0"></i>
                                </div>
                                @}
                                <el-upload
                                        style="display: inline-block;"
                                        :limit="5"
                                        class="avatar-uploader"
                                        action="/tCouponManage/uploadPic"
@@ -71,7 +71,7 @@
                                        :on-remove="handleRemove">
                                    <i class="el-icon-plus"></i>
                                </el-upload>
                                </div>
                            </div>
                        </div>
cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods.js
@@ -134,7 +134,7 @@
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tGoods/tCity_update/' + TPointProducts.seItem.id
            content: Feng.ctxPath + '/tGoods/goods_info/' + TPointProducts.seItem.id
        });
        this.layerIndex = index;
    }
cloud-server-management/src/main/webapp/static/modular/system/tGoods/tGoods_info.js
@@ -294,6 +294,7 @@
 * @param e
 */
function delImg(e){
    $(e).parent().remove();
}