From 3bc7fe7b6eb9a6f9b6ed346b6cd3c8f5a4a32e39 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期五, 11 四月 2025 09:09:14 +0800
Subject: [PATCH] 1
---
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html | 155 +++++++++-----
cloud-server-management/src/main/webapp/static/modular/system/tHuiminCard/tHuiminCard2.js | 15
cloud-server-activity/src/main/java/com/dsh/activity/controller/THuiminCardController.java | 59 ++++-
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java | 177 +++++++++++----
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/HuiminCardStoreVO.java | 2
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard.html | 51 +++-
cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java | 37 ++
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html | 93 +++++---
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/HuiminCardClient.java | 5
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java | 18 +
10 files changed, 432 insertions(+), 180 deletions(-)
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/THuiminCardController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/THuiminCardController.java
index b227540..e41cc81 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/THuiminCardController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/THuiminCardController.java
@@ -27,9 +27,20 @@
private PayHuiminService payHuiminService;
- @GetMapping("/queryPage")
- public Page<THuiminCard> queryPage(Page<THuiminCard> page, THuiminCard tHuiminCard) {
+ @PostMapping("/queryPage")
+ public Page<THuiminCard> queryPage(@RequestBody THuiminCard tHuiminCard) {
QueryWrapper<THuiminCard> queryWrapper = new QueryWrapper<>();
+
+
+ Integer objectType = tHuiminCard.getObjectType();
+ Integer objectId = tHuiminCard.getObjectId();
+ if (objectType == 2){
+ queryWrapper.eq("operatorId",objectId);
+ }
+ if (objectType == 3){
+ queryWrapper.apply("FIND_IN_SET("+objectId+",storeIds)");
+ }
+
if (!StringUtils.isEmpty(tHuiminCard.getHuiMinName())){
queryWrapper.like("huiMinName",tHuiminCard.getHuiMinName());
}
@@ -40,19 +51,19 @@
queryWrapper.ge("startTime",tHuiminCard.getStartTime());
queryWrapper.le("endTime",tHuiminCard.getEndTime());
}
- Integer flag = tHuiminCard.getFlag();
- if (flag != null){
+ Integer huiMinStatus = tHuiminCard.getHuiMinStatus();
+ // 惠民卡状态:1未开始 2已开始 3已结束
+ if (huiMinStatus != null){
Date now = new Date();
- switch (flag) {
+ switch (huiMinStatus) {
case 1:
- queryWrapper.le("startTime", now);
+ queryWrapper.gt("startTime", now);
break;
- case 2:
- queryWrapper.ge("startTime", now);
+ case 2:
+ queryWrapper.apply("(startTime <= now() AND endTime >= now()) OR(startTime IS NULL AND endTime IS NULL)");
+ break;
+ case 3:
queryWrapper.le("endTime", now);
- break;
- case 3:
- queryWrapper.lt("endTime", now);
break;
}
}
@@ -60,8 +71,14 @@
if (tHuiminCard.getStatus() != null){
queryWrapper.eq("status",tHuiminCard.getStatus());
}
+ Page<THuiminCard> page = new Page<>();
+ page.setCurrent(tHuiminCard.getCurrent());
+ page.setSize(tHuiminCard.getSize());
Page<THuiminCard> page1 = tHuiminCardService.page(page, queryWrapper);
List<THuiminCard> records = page1.getRecords();
+ if (records.isEmpty()){
+ return page1;
+ }
List<Integer> cardIds = records.stream().map(THuiminCard::getId).collect(Collectors.toList());
List<TPayHuimin> list = payHuiminService.list(new LambdaQueryWrapper<TPayHuimin>()
.in(TPayHuimin::getCardId, cardIds));
@@ -75,6 +92,25 @@
records.forEach(item -> {
item.setBuyCount(cardIdCountMap.getOrDefault(item.getId(), 0L).intValue());
+
+ // 惠民卡状态计算逻辑
+ Date startTime = item.getStartTime();
+ Date endTime = item.getEndTime();
+
+ Date now = new Date();
+ if (startTime == null || endTime == null) {
+ // 时间字段未填写时默认状态为「已开始」
+ item.setHuiMinStatus(2);
+ } else {
+ if (startTime.after(now)) {
+ item.setHuiMinStatus(1); // 未开始
+ } else if (endTime.before(now)) {
+ item.setHuiMinStatus(3); // 已结束
+ } else {
+ item.setHuiMinStatus(2); // 已开始
+ }
+ }
+
});
return page1;
}
@@ -92,7 +128,6 @@
@PostMapping("/updateById")
public R<?> updateById(@RequestBody THuiminCard tHuiminCard) {
- String unUseTimes = tHuiminCard.getUnUseTimes();
tHuiminCardService.updateById(tHuiminCard);
return R.ok("");
}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
index 3c49174..0628825 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/THuiminCard.java
@@ -103,18 +103,20 @@
@TableField("banner")
private String banner;
- /**
- *有效期开始时间 不填表示永久
- */
- @TableField("endTime")
- @ApiModelProperty(value = "有效期开始时间 不填表示永久")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Date endTime;
+
/**
*有效期结束时间 不填表示永久
*/
- @TableField("startTime")
+ @TableField("endTime")
@ApiModelProperty(value = "有效期结束时间 不填表示永久")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+
+ /**
+ *有效期开始时间 不填表示永久
+ */
+ @TableField("startTime")
+ @ApiModelProperty(value = "有效期开始时间 不填表示永久")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
/**
@@ -140,7 +142,6 @@
*/
@TableField("useScope")
@ApiModelProperty(value = "使用范围1门店2场地")
-
private Integer useScope;
/**
*根据适用范围,存储门店id或场地id,多个逗号分隔
@@ -196,6 +197,24 @@
*/
@TableField(exist = false)
private Integer buyCount;
+ @TableField(exist = false)
+ private Long current;
+ @TableField(exist = false)
+ private Long size;
+ /**
+ * 惠民卡状态:1未开始 2已开始 3已结束
+ */
+ @TableField(exist = false)
+ private Integer huiMinStatus;
+
+ /**
+ * 1=平台,2=城市管理员,3=门店
+ */
+ @TableField(exist = false)
+ private Integer objectType;
+
+ @TableField(exist = false)
+ private Integer objectId;
@Override
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/HuiminCardClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/HuiminCardClient.java
index 6445fae..05b3831 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/HuiminCardClient.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/HuiminCardClient.java
@@ -21,9 +21,8 @@
@PostMapping(value = "/tHuiminCard/save")
void save(@RequestBody THuiminCard tHuiminCard);
- @GetMapping(value = "/tHuiminCard/queryPage")
- Page<THuiminCard> queryPage(@RequestParam("page") Page<THuiminCard>page,
- @RequestParam("tHuiminCard") THuiminCard tHuiminCard);
+ @PostMapping(value = "/tHuiminCard/queryPage")
+ Page<THuiminCard> queryPage(@RequestBody THuiminCard tHuiminCard);
@GetMapping(value = "/tHuiminCard/getById")
THuiminCard getById(@RequestParam("id") Integer id);
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
index dc31ff8..39c3612 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/THuiminCard.java
@@ -167,6 +167,24 @@
private String startTimeStr;
@TableField(exist = false)
private String endTimeStr;
+ @TableField(exist = false)
+ private Long current;
+ @TableField(exist = false)
+ private Long size;
+ /**
+ * 惠民卡状态:1未开始 2已开始 3已结束
+ */
+ @TableField(exist = false)
+ private Integer huiMinStatus;
+
+ /**
+ * 1=平台,2=城市管理员,3=门店
+ */
+ @TableField(exist = false)
+ private Integer objectType;
+
+ @TableField(exist = false)
+ private Integer objectId;
@Override
protected Serializable pkVal() {
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
index d65ffc3..98cb2b2 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/THuiminCardController.java
@@ -8,6 +8,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.feignClient.activity.HuiminCardClient;
import com.dsh.course.feignClient.activity.model.THuiminCard;
+import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.core.page.PageInfoBT;
import com.dsh.guns.modular.system.model.*;
@@ -16,13 +17,13 @@
import com.dsh.guns.modular.system.service.TOperatorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* 惠民卡控制器
@@ -57,8 +58,9 @@
* 跳转到添加惠民卡
*/
@RequestMapping("/tHuiminCard_add")
- public String tHuiminCardAdd() {
-
+ public String tHuiminCardAdd(Model model) {
+ User user = UserExt.getUser();
+ model.addAttribute("objectType", user.getObjectType());
return PREFIX + "tHuiminCard_add.html";
}
@@ -66,7 +68,9 @@
* 跳转到详情页面
*/
@RequestMapping("/tHuiminCard_detail/{id}")
- public String tHuiminCardDetail(@PathVariable("id") Integer id) {
+ public String tHuiminCardDetail(@PathVariable("id") Integer id,Model model) {
+ User user = UserExt.getUser();
+ model.addAttribute("objectType", user.getObjectType());
return PREFIX + "tHuiminCard_detail.html";
}
@@ -75,7 +79,9 @@
*/
@RequestMapping("/getDetail")
@ResponseBody
- public THuiminCard getDetail(Integer id) {
+ public THuiminCard getDetail(Integer id,Model model) {
+ User user = UserExt.getUser();
+ model.addAttribute("objectType", user.getObjectType());
return huiminCardClient.getById(id);
}
@@ -86,8 +92,16 @@
*/
@RequestMapping(value = "/list")
@ResponseBody
- public PageInfoBT<THuiminCard> list(Page<THuiminCard> page,THuiminCard tHuiminCard) {
- return super.packForBT(huiminCardClient.queryPage(page, tHuiminCard));
+ public PageInfoBT<THuiminCard> list(THuiminCard tHuiminCard) {
+ User user = UserExt.getUser();
+ if(user == null){
+ return null;
+ }
+ Integer objectType = user.getObjectType();
+ tHuiminCard.setObjectType(objectType);
+ Integer objectId = user.getObjectId();
+ tHuiminCard.setObjectId(objectId);
+ return super.packForBT(huiminCardClient.queryPage(tHuiminCard));
}
/**
@@ -101,8 +115,19 @@
if (!StringUtils.isEmpty(storeIds)){
ids = storeIds.split(",");
}
-
+ User user = UserExt.getUser();
+ if(user == null){
+ return null;
+ }
+ Integer objectType = user.getObjectType();
+ if (objectType != 1 && objectType != 2){
+ throw new RuntimeException("权限不足");
+ }
+ if (objectType == 2){
+ query.setOperatorId(user.getObjectId());
+ }
Page<TStore> storePage = storeService.page(page, new LambdaQueryWrapper<TStore>()
+ .eq(TStore::getState, 1)
.in(ids.length > 0, TStore::getId, Arrays.asList(ids))
.eq(!StringUtils.isEmpty(query.getProvinceCode()), TStore::getProvinceCode, query.getProvinceCode())
.eq(!StringUtils.isEmpty(query.getCityCode()), TStore::getCityCode, query.getCityCode())
@@ -118,6 +143,7 @@
TOperator operator = operatorService.getById(tStore.getOperatorId());
if (operator != null){
huiminCardStoreVO.setOperatorName(operator.getName());
+ huiminCardStoreVO.setOperatorId(tStore.getOperatorId());
}
return huiminCardStoreVO;
});
@@ -131,65 +157,115 @@
public Object siteList(Page<TSite> page, HuiminCardStoreQuery query) {
String storeName = query.getStoreName();
List<String> storeIds = new ArrayList<>();
- if (!StringUtils.isEmpty(storeName)){
- List<String> storeIdsByName = storeService.listObjs(new LambdaQueryWrapper<TStore>()
- .select(TStore::getId)
- .eq(TStore::getName, storeName), String::valueOf);
- if (storeIdsByName != null && !storeIdsByName.isEmpty()){
- storeIds.addAll(storeIdsByName);
- }else {
- return null;
- }
+
+ // 收集storeName条件的storeIds(不提前返回null)
+ if (!StringUtils.isEmpty(storeName)) {
+ List<String> storeIdsByName = storeService.listObjs(
+ new LambdaQueryWrapper<TStore>()
+ .select(TStore::getId)
+ .eq(TStore::getName, storeName),
+ String::valueOf);
+ storeIds.addAll(storeIdsByName);
}
+
+ // 收集operatorId条件的storeIds(不提前返回null)
Integer operatorId = query.getOperatorId();
- if (operatorId != null){
- List<String> storeIdsByOperatorId = storeService.listObjs(new LambdaQueryWrapper<TStore>()
- .select(TStore::getId)
- .eq(TStore::getOperatorId, operatorId), String::valueOf);
- if (storeIdsByOperatorId != null && !storeIdsByOperatorId.isEmpty()){
- storeIds.addAll(storeIdsByOperatorId);
- }else {
- return null;
- }
+ if (operatorId != null) {
+ List<String> storeIdsByOperatorId = storeService.listObjs(
+ new LambdaQueryWrapper<TStore>()
+ .select(TStore::getId)
+ .eq(TStore::getOperatorId, operatorId),
+ String::valueOf);
+ storeIds.addAll(storeIdsByOperatorId);
}
- Page<TSite> sitePage = tSiteService.page(page, new LambdaQueryWrapper<TSite>()
- .eq(!StringUtils.isEmpty(query.getProvinceCode()), TSite::getProvinceCode, query.getProvinceCode())
- .eq(!StringUtils.isEmpty(query.getCityCode()), TSite::getCityCode, query.getCityCode())
- .in(!storeIds.isEmpty(), TSite::getStoreId, storeIds));
+ // 处理用户权限过滤(objectType为2)
+ User user = UserExt.getUser();
+ if (user != null && user.getObjectType() == 2) {
+ List<String> authorizedStoreIds = storeService.listObjs(
+ new LambdaQueryWrapper<TStore>()
+ .select(TStore::getId)
+ .eq(TStore::getOperatorId, user.getObjectId()),
+ String::valueOf);
+ if (authorizedStoreIds.isEmpty()) {
+ new Page();
+ }
+ if (storeIds.isEmpty()){
+ storeIds.addAll(authorizedStoreIds);
+ }else {
+ storeIds.retainAll(new HashSet<>(authorizedStoreIds));
+ }
+
+ }else if (user != null && user.getObjectType() == 3){
+ storeIds = new ArrayList<>();
+ storeIds.add(String.valueOf(user.getObjectId()));
+ }
+
+ // 最终查询条件:storeIds为空时会返回空Page
+ Page<TSite> sitePage = tSiteService.page(page,
+ new LambdaQueryWrapper<TSite>()
+ .eq(!StringUtils.isEmpty(query.getProvinceCode()), TSite::getProvinceCode, query.getProvinceCode())
+ .eq(!StringUtils.isEmpty(query.getCityCode()), TSite::getCityCode, query.getCityCode())
+ .in(!storeIds.isEmpty(), TSite::getStoreId, storeIds));
+
+ // 批量查询store和operator,避免N+1问题
+ List<TSite> sites = sitePage.getRecords();
+ if (sites.isEmpty()) {
+ return sitePage.convert(t -> null); // 返回空Page
+ }
+
+ // 收集需要的storeId和operatorId
+ List<Integer> storeIdsForVO = sites.stream().map(TSite::getStoreId).distinct().collect(Collectors.toList());
+ List<Integer> operatorIdsForVO = sites.stream().map(TSite::getOperatorId).distinct().collect(Collectors.toList());
+
+ // 批量查询并缓存结果
+ Map<Integer, TStore> storeMap = storeService.listByIds(storeIdsForVO)
+ .stream()
+ .collect(Collectors.toMap(TStore::getId, Function.identity()));
+
+ Map<Integer, TOperator> operatorMap = operatorService.listByIds(operatorIdsForVO)
+ .stream()
+ .collect(Collectors.toMap(TOperator::getId, Function.identity()));
+
+ // 转换VO时直接使用缓存结果
return sitePage.convert(tSite -> {
- HuiminCardSiteVO huiminCardSiteVO = new HuiminCardSiteVO();
- huiminCardSiteVO.setSiteId(tSite.getId());
- huiminCardSiteVO.setProvince(tSite.getProvince());
- huiminCardSiteVO.setSiteName(tSite.getName());
- huiminCardSiteVO.setIds(tSite.getIds());
+ HuiminCardSiteVO vo = new HuiminCardSiteVO();
+ vo.setSiteId(tSite.getId());
+ vo.setProvince(tSite.getProvince());
+ vo.setSiteName(tSite.getName());
+ vo.setIds(tSite.getIds());
- TStore store = storeService.getById(tSite.getStoreId());
- if (store != null){
- huiminCardSiteVO.setStoreName(store.getName());
+ TStore store = storeMap.get(tSite.getStoreId());
+ if (store != null) {
+ vo.setStoreName(store.getName());
}
- TOperator operator = operatorService.getById(tSite.getOperatorId());
- if (operator != null){
- huiminCardSiteVO.setOperatorName(operator.getName());
+ TOperator operator = operatorMap.get(tSite.getOperatorId());
+ if (operator != null) {
+ vo.setOperatorName(operator.getName());
}
- return huiminCardSiteVO;
-
+ return vo;
});
}
+
@PostMapping(value = "/add")
@ResponseBody
public Object add(THuiminCard tHuiminCard) {
int a = 0;
+ String useIds = tHuiminCard.getUseIds();
+ String[] useIdArr = useIds.split(",");
if (tHuiminCard.getUseScope()==1){
- tHuiminCard.setStoreIds(tHuiminCard.getUseIds());
+ tHuiminCard.setStoreIds(useIds);
+ String useId = useIdArr[0];
+ TStore store = storeService.getById(useId);
+ tHuiminCard.setOperatorId(store.getOperatorId());
}else{
StringBuilder storeIds = new StringBuilder();
- for (String s : tHuiminCard.getUseIds().split(",")) {
+ for (String s : useIdArr) {
TSite site = tSiteService.getById(s);
if (site!=null){
storeIds.append(site.getStoreId()).append(",");
@@ -197,7 +273,12 @@
}
StringBuilder stringBuilder = storeIds.deleteCharAt(storeIds.length() - 1);
tHuiminCard.setStoreIds(stringBuilder.toString());
+
+ String useId = useIdArr[0];
+ TSite site = tSiteService.getById(useId);
+ tHuiminCard.setOperatorId(site.getOperatorId());
}
+
huiminCardClient.save(tHuiminCard);
return SUCCESS_TIP;
}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/HuiminCardStoreVO.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/HuiminCardStoreVO.java
index d22e09c..2e87066 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/HuiminCardStoreVO.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/HuiminCardStoreVO.java
@@ -10,6 +10,8 @@
private String operatorName;
+ private Integer operatorId;
+
private String storeName;
private String ids;
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard.html
index 7a6b43f..b4492dd 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard.html
@@ -8,11 +8,11 @@
<div class="ibox-content">
<el-form :inline="true" :model="query">
<el-form-item label="惠民卡名称:">
- <el-input v-model="query.name" placeholder="请输入"></el-input>
+ <el-input v-model="query.huiMinName" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="惠民卡类型:">
- <el-select v-model="query.type" placeholder="全部">
+ <el-select v-model="query.huiMinType" placeholder="全部">
<el-option label="全部" value=""></el-option>
<el-option label="年度卡" value="year"></el-option>
<el-option label="季度卡" value="quarter"></el-option>
@@ -22,11 +22,21 @@
<el-form-item label="有效期:">
<el-date-picker
v-model="query.dateRange"
+ value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
+ </el-form-item>
+
+ <el-form-item label="惠民卡状态:">
+ <el-select v-model="query.huiMinStatus" placeholder="全部">
+ <el-option label="全部" value=""></el-option>
+ <el-option label="未开始" value="1"></el-option>
+ <el-option label="已开始" value="2"></el-option>
+ <el-option label="已结束" value="3"></el-option>
+ </el-select>
</el-form-item>
<el-form-item label="可售状态:">
@@ -39,13 +49,30 @@
</el-form>
<div class="row">
<div class="col-sm-12">
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleSearch" icon="el-icon-search">搜索</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleAdd" icon="el-icon-circle-plus-outline">添加</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleEdit" icon="el-icon-edit">编辑</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleDelete" icon="el-icon-delete">删除</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleShelves(1)" icon="el-icon-upload2">上架</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleShelves(2)" icon="el-icon-download">下架</el-button>
- <el-button type="primary" size="medium" style="background-color:#1ab394;color: #ffffff;border:#1ab394;" v-on:click="handleViewDetail" icon="el-icon-tickets">查看详情</el-button>
+ <button type="button" class="btn btn-primary" v-on:click="handleSearch">
+ <i class="fa fa-search"></i>
+ 搜索
+ </button>
+ <button type="button" class="btn btn-primary" v-on:click="handleAdd">
+ <i class="fa fa-plus"></i>
+ 添加
+ </button>
+ <button type="button" class="btn btn-primary" v-on:click="handleEdit">
+ <i class="fa fa-edit"></i>
+ 编辑
+ </button>
+ <button type="button" class="btn btn-primary" v-on:click="handleDelete">
+ <i class="fa fa-remove"></i>
+ 删除
+ </button>
+ <button type="button" class="btn btn-primary" v-on:click="handleShelves(1)">
+ <i class="fa fa-check"></i>
+ 上架
+ </button>
+ <button type="button" class="btn btn-primary" v-on:click="handleShelves(2)">
+ <i class="fa fa-remove"></i>
+ 下架
+ </button>
</div>
</div>
<el-table
@@ -91,9 +118,9 @@
<el-table-column prop="sort" label="排序"></el-table-column>
<el-table-column prop="flag" label="活动状态" >
<template slot-scope="scope">
- <span v-if="scope.row.flag === 1">未开始</span>
- <span v-else-if="scope.row.flag === 2">已开始</span>
- <span v-else-if="scope.row.flag === 3">已结束</span>
+ <span v-if="scope.row.huiMinStatus === 1">未开始</span>
+ <span v-else-if="scope.row.huiMinStatus === 2">已开始</span>
+ <span v-else-if="scope.row.huiMinStatus === 3">已结束</span>
<span v-else>未知类型</span>
</template>
</el-table-column>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
index 39eaf75..5eb8e8e 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
@@ -167,24 +167,18 @@
<!-- 时间输入和删除按钮 -->
<div class="row g-3">
<div class="col-md-6" style="display: flex">
- <el-time-select
- placeholder="起始时间"
+ <el-time-picker
v-model="weekGroup.startTime"
- :picker-options="{
- start: '00:00',
- step: '01:00',
- end: '23:00'}"
- >
- </el-time-select>
- <el-time-select
- placeholder="结束时间"
+ format="HH:mm"
+ value-format="HH:mm"
+ placeholder="开始时间">
+ </el-time-picker>
+ <el-time-picker
+ format="HH:mm"
+ value-format="HH:mm"
v-model="weekGroup.endTime"
- :picker-options="{
- start: '00:00',
- step: '01:00',
- end: '23:00',
- minTime: weekGroup.startTime}">
- </el-time-select>
+ placeholder="结束时间">
+ </el-time-picker>
</div>
<div class="col-md-6">
<button
@@ -223,13 +217,13 @@
</el-form-item>
<!-- 适用范围 -->
- <el-form-item label="适用范围" prop="useScope">
- <el-radio v-model="huiminCard.useScope" label="1">指定门店</el-radio>
- <el-radio v-model="huiminCard.useScope" label="2">指定场地</el-radio>
+ <el-form-item label="适用范围" prop="useScope" >
+ <el-radio v-if="objectType !=='3'" v-model="huiminCard.useScope" v-on:change="useScopeChange()" label="1">指定门店</el-radio>
+ <el-radio v-model="huiminCard.useScope" v-on:change="useScopeChange()" label="2">指定场地</el-radio>
</el-form-item>
<!-- 指定门店 -->
- <el-form-item label="指定门店" v-if="huiminCard.useScope === '1'" prop="storeIds">
+ <el-form-item label="指定门店" v-if="huiminCard.useScope === '1' && objectType !=='3'" prop="storeIds">
<el-button type="text" v-on:click="handleSelectStore()">选择门店</el-button>
<el-table
:data="tableData"
@@ -302,6 +296,7 @@
</el-table>
</el-form-item>
+
<!-- 惠民卡介绍 -->
<el-form-item label="惠民卡介绍" prop="introduce">
<textarea type="text/plain" v-model="introduces" id="editor_1"></textarea>
@@ -332,7 +327,6 @@
<el-select v-model="storeForm.provinceCode" size="mini" clearable filterable placeholder="请选择">
<el-option
v-for="item in provinces"
- :key="item.code"
:label="item.name"
:value="item.code">
</el-option>
@@ -344,7 +338,6 @@
<el-select v-model="storeForm.cityCode" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in cities"
- :key="item.citycode"
:label="item.name"
:value="item.citycode">
</el-option>
@@ -352,11 +345,10 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item label="所属运营商">
+ <el-form-item label="所属运营商" label-width="100px">
<el-select v-model="storeForm.operatorId" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in operations"
- :key="item.id"
:label="item.name"
:value="item.id">
</el-option>
@@ -405,12 +397,13 @@
</el-table-column>
</el-table>
<el-pagination
- background
- layout="prev, pager, next"
- v-on:pagination="storeList"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- :total="tableStoreTotal">
+ v-on:size-change="handleStoreSizeChange"
+ v-on:current-change="handleStoreCurrentChange"
+ :current-page="currentStorePage"
+ :page-sizes="[10, 50, 100, 200]"
+ :page-size="pageStoreSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="storeTotal">
</el-pagination>
<span slot="footer" class="dialog-footer">
<el-button v-on:click="dialogVisible2 = false">取 消</el-button>
@@ -432,7 +425,6 @@
<el-select v-model="siteForm.provinceCode" size="mini" clearable filterable placeholder="请选择">
<el-option
v-for="item in provinces"
- :key="item.code"
:label="item.name"
:value="item.code">
</el-option>
@@ -444,7 +436,6 @@
<el-select v-model="siteForm.cityCode" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in cities"
- :key="item.citycode"
:label="item.name"
:value="item.citycode">
</el-option>
@@ -452,11 +443,10 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item label="所属运营商">
+ <el-form-item label="所属运营商" label-width="100px">
<el-select v-model="siteForm.operatorId" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in operations"
- :key="item.id"
:label="item.name"
:value="item.id">
</el-option>
@@ -511,12 +501,16 @@
</el-table-column>
</el-table>
- <pagination
- v-show="tableSiteTotal>0"
- :total="tableSiteTotal"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- v-on:pagination="siteList"></pagination>
+
+ <el-pagination
+ v-on:size-change="handleSiteSizeChange"
+ v-on:current-change="handleSiteCurrentChange"
+ :current-page="currentSitePage"
+ :page-sizes="[10, 50, 100, 200]"
+ :page-size="pageSiteSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="siteTotal">
+ </el-pagination>
<span slot="footer" class="dialog-footer">
<el-button v-on:click="dialogVisible3 = false">取 消</el-button>
@@ -647,6 +641,13 @@
introduces: null,
multipleSelection1: [],
multipleSelection2: [],
+ currentSitePage: 1,
+ pageSiteSize: 10,
+ currentStorePage: 1,
+ pageStoreSize: 10,
+ siteTotal: 0,
+ storeTotal: 0,
+ objectType: null,
unUseTimes: [
{}
],
@@ -673,7 +674,6 @@
},
tableData: [],
tableStoreData: [],
- tableStoreTotal: 0,
tableStoreLoading: false,
tableSiteData: [],
tableSiteTotal: 0,
@@ -798,7 +798,7 @@
return isLt2M;
},
handleRemove(file, fileList) {
- const fileUrl = file.response;
+ const fileUrl = file.url;
this.banners.forEach((item, index) => {
if (item === fileUrl) {
this.banners.splice(index, 1);
@@ -864,7 +864,7 @@
let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/storeList",
(data) => {
vm.tableStoreData = data.records; // 使用 vm 替代 this
- vm.tableStoreTotal = data.total;
+ vm.storeTotal = data.total;
vm.tableStoreLoading = false;
console.log('成功获取数据:', vm.tableStoreData); // 验证数据
},
@@ -873,8 +873,8 @@
Feng.error("请求失败: " + data.responseJSON.message);
}
);
- this.storeForm.pageNum = vm.queryParams.pageNum;
- this.storeForm.pageSize = vm.queryParams.pageSize
+ this.storeForm.pageNum = vm.currentStorePage;
+ this.storeForm.pageSize = vm.pageStoreSize
ajax.set(this.storeForm);
ajax.start();
@@ -887,6 +887,9 @@
vm.tableSiteData = data.records; // 使用 vm 替代 this
vm.tableSiteTotal = data.total;
vm.tableSiteLoading = false;
+ vm.currentStorePage = data.current;
+ vm.pageStoreSize = data.size;
+ vm.siteTotal = data.total;
console.log('成功获取数据:', vm.tableSiteData); // 验证数据
},
(data) => {
@@ -894,8 +897,8 @@
Feng.error("请求失败: " + data.responseJSON.message);
}
);
- this.siteForm.pageNum = vm.queryParams.pageNum;
- this.siteForm.pageSize = vm.queryParams.pageSize
+ this.siteForm.current = vm.currentSitePage;
+ this.siteForm.size = vm.pageSiteSize
ajax.set(this.siteForm);
ajax.start();
},
@@ -903,14 +906,10 @@
this.dialogVisible2 = false;
},
handleSiteClose() {
- this.$confirm('确认关闭?1')
- .then(_ => {
- this.dialogVisible3 = false;
- })
- .catch(_ => {
- });
+ this.dialogVisible3 = false;
},
handleSelectionChange(val) {
+
if (this.huiminCard.useScope === '1') {
this.multipleSelection1 = val;
} else if (this.huiminCard.useScope === '2') {
@@ -937,8 +936,30 @@
Feng.info('请选择数据');
return;
}
- this.dialogVisible2 = false
- this.tableData = this.multipleSelection1;
+
+ // 新增:检查所有新选中的门店是否属于同一运营商
+ const firstOperator = this.multipleSelection1[0].operatorId;
+ if (this.multipleSelection1.some(item => item.operatorId !== firstOperator)) {
+ Feng.info('请选择同一运营商');
+ return;
+ }
+
+ // 检查新选门店与已有门店的运营商是否一致(如果需要)
+ if (this.tableData.length > 0) {
+ const existingOperator = this.tableData[0].operatorId;
+ if (firstOperator !== existingOperator) {
+ Feng.info('新选门店的运营商需与已有门店一致');
+ return;
+ }
+ }
+
+ this.multipleSelection1.forEach((item) => {
+ if (!this.tableData.some(item1 => item1.storeId === item.storeId)) {
+ this.tableData.push(item);
+ }
+ });
+
+ this.dialogVisible2 = false;
this.huiminCard.useIds = this.tableData.map(item => item.storeId).join(',');
},
handleSite() {
@@ -949,6 +970,9 @@
this.dialogVisible3 = false
this.tableData = this.multipleSelection2;
this.huiminCard.useIds = this.tableData.map(item => item.siteId).join(',');
+ },
+ useScopeChange() {
+ this.tableData = [];
},
submitForm(formName) {
this.$refs[formName].validate(valid => {
@@ -984,10 +1008,29 @@
}
});
},
+ handleSiteSizeChange(val){
+ this.pageSiteSize = val;
+ this.siteList();
+ },
+ handleSiteCurrentChange(val){
+ this.currentSitePage = val;
+ this.siteList();
+ },
+ handleStoreSizeChange(val){
+ this.pageSiteSize = val;
+ this.storeList();
+ },
+ handleStoreCurrentChange(val){
+ this.currentSitePage = val;
+ this.storeList();
+ },
},
created() {
let editor_1 = UE.getEditor('editor_1');
-
+ this.objectType = `${objectType}`
+ if (this.objectType === '3'){
+ this.huiminCard.useScope = '2'
+ }
let ajax = new $ax(Feng.ctxPath + "/base/region/getProvince",
(data) => {
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
index 55ca096..e70122c 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_detail.html
@@ -206,7 +206,7 @@
<!-- 不可用时间 -->
<el-form-item label="不可用时间" prop="unUseTimes">
- <el-button type="text" v-on:click="addUnUseTime()">添加</el-button>
+ <el-button typ e="text" v-on:click="addUnUseTime()">添加</el-button>
<div v-for="(item, dayIndex) in unUseTimes"
:key="dayIndex"
class="date-picker-item mb-2">
@@ -228,12 +228,12 @@
<!-- 适用范围 -->
<el-form-item label="适用范围" prop="useScope">
- <el-radio v-model="huiminCard.useScope" label="1">指定门店</el-radio>
+ <el-radio v-if="objectType !=='3'" v-model="huiminCard.useScope" label="1">指定门店</el-radio>
<el-radio v-model="huiminCard.useScope" label="2">指定场地</el-radio>
</el-form-item>
<!-- 指定门店 -->
- <el-form-item label="指定门店" v-if="huiminCard.useScope === '1'" prop="storeIds">
+ <el-form-item label="指定门店" v-if="huiminCard.useScope === '1' && objectType !=='3'" prop="storeIds">
<el-button type="text" v-on:click="handleSelectStore()">选择门店</el-button>
<el-table
:data="tableData"
@@ -438,11 +438,9 @@
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="所在省">
- <el-select v-model="siteForm.provinceCode" size="mini" clearable filterable
- placeholder="请选择">
+ <el-select v-model="siteForm.provinceCode" size="mini" clearable filterable placeholder="请选择">
<el-option
v-for="item in provinces"
- :key="item.code"
:label="item.name"
:value="item.code">
</el-option>
@@ -451,11 +449,9 @@
</el-col>
<el-col :span="6">
<el-form-item label="所在市">
- <el-select v-model="siteForm.cityCode" clearable size="mini" filterable
- placeholder="请选择">
+ <el-select v-model="siteForm.cityCode" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in cities"
- :key="item.citycode"
:label="item.name"
:value="item.citycode">
</el-option>
@@ -463,12 +459,10 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item label="所属运营商">
- <el-select v-model="siteForm.operatorId" clearable size="mini" filterable
- placeholder="请选择">
+ <el-form-item label="所属运营商" label-width="100px">
+ <el-select v-model="siteForm.operatorId" clearable size="mini" filterable placeholder="请选择">
<el-option
v-for="item in operations"
- :key="item.id"
:label="item.name"
:value="item.id">
</el-option>
@@ -483,8 +477,7 @@
</el-row>
<el-row>
<el-col :span="24">
- <el-button v-on:click="siteList" style="background-color:#1ab394;color: #ffffff" size="mini"
- icon="el-icon-search">
+ <el-button v-on:click="siteList" style="background-color:#1ab394;color: #ffffff" size="mini" icon="el-icon-search">
搜索
</el-button>
</el-col>
@@ -524,12 +517,16 @@
</el-table-column>
</el-table>
- <pagination
- v-show="tableSiteTotal>0"
- :total="tableSiteTotal"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- v-on:pagination="siteList"></pagination>
+
+ <el-pagination
+ v-on:size-change="handleSiteSizeChange"
+ v-on:current-change="handleSiteCurrentChange"
+ :current-page="currentSitePage"
+ :page-sizes="[10, 50, 100, 200]"
+ :page-size="pageSiteSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="siteTotal">
+ </el-pagination>
<span slot="footer" class="dialog-footer">
<el-button v-on:click="dialogVisible3 = false">取 消</el-button>
@@ -605,6 +602,13 @@
operatorId: null,
storeName: '',
},
+ objectType: null,
+ currentSitePage: 1,
+ pageSiteSize: 10,
+ currentStorePage: 1,
+ pageStoreSize: 10,
+ siteTotal: 0,
+ storeTotal: 0,
unBuyCoverFileList: [],
buyCoverFileList: [],
bannerFileList: [],
@@ -814,7 +818,8 @@
return isLt2M;
},
handleRemove(file, fileList) {
- const fileUrl = file.response;
+
+ const fileUrl = file.url;
this.banners.forEach((item, index) => {
if (item === fileUrl) {
this.banners.splice(index, 1);
@@ -880,7 +885,7 @@
let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/storeList",
(data) => {
vm.tableStoreData = data.records; // 使用 vm 替代 this
- vm.tableStoreTotal = data.total;
+ vm.storeTotal = data.total;
vm.tableStoreLoading = false;
console.log('成功获取数据:', vm.tableStoreData); // 验证数据
},
@@ -889,8 +894,8 @@
Feng.error("请求失败: " + data.responseJSON.message);
}
);
- this.storeForm.pageNum = vm.queryParams.pageNum;
- this.storeForm.pageSize = vm.queryParams.pageSize
+ this.storeForm.pageNum = vm.currentStorePage;
+ this.storeForm.pageSize = vm.pageStoreSize
ajax.set(this.storeForm);
ajax.start();
@@ -903,6 +908,9 @@
vm.tableSiteData = data.records; // 使用 vm 替代 this
vm.tableSiteTotal = data.total;
vm.tableSiteLoading = false;
+ vm.currentStorePage = data.current;
+ vm.pageStoreSize = data.size;
+ vm.siteTotal = data.total;
console.log('成功获取数据:', vm.tableSiteData); // 验证数据
},
(data) => {
@@ -910,8 +918,8 @@
Feng.error("请求失败: " + data.responseJSON.message);
}
);
- this.siteForm.pageNum = vm.queryParams.pageNum;
- this.siteForm.pageSize = vm.queryParams.pageSize
+ this.siteForm.current = vm.currentSitePage;
+ this.siteForm.size = vm.pageSiteSize
ajax.set(this.siteForm);
ajax.start();
},
@@ -919,12 +927,7 @@
this.dialogVisible2 = false;
},
handleSiteClose() {
- this.$confirm('确认关闭?1')
- .then(_ => {
- this.dialogVisible3 = false;
- })
- .catch(_ => {
- });
+ this.dialogVisible3 = false;
},
handleSelectionChange(val) {
if (this.huiminCard.useScope === '1') {
@@ -1001,10 +1004,27 @@
},
cancelForm(){
parent.layer.close(window.parent.THuiminCard.layerIndex);
- }
+ },
+ handleSiteSizeChange(val){
+ this.pageSiteSize = val;
+ this.siteList();
+ },
+ handleSiteCurrentChange(val){
+ this.currentSitePage = val;
+ this.siteList();
+ },
+ handleStoreSizeChange(val){
+ this.pageSiteSize = val;
+ this.storeList();
+ },
+ handleStoreCurrentChange(val){
+ this.currentSitePage = val;
+ this.storeList();
+ },
},
created() {
let editor_1 = UE.getEditor('editor_1');
+ this.objectType = `${objectType}`
const urlParams = new URLSearchParams(window.location.search);
this.pageType = urlParams.get('pageType');
@@ -1023,13 +1043,16 @@
this.periodOfValidity = [data.startTime, data.endTime]
+ console.log("data.useScope",data.useScope)
+
this.huiminCard = {
...data,
- unUseTimes: data.unUseTimes == null? {}: JSON.parse(data.unUseTimes),
huiMinType: Number(data.huiMinType),
startTime: data.startTimeStr,
endTime: data.endTimeStr,
+ useScope: data.useScope+"",
}
+ this.unUseTimes = data.unUseTimes == null? {}: JSON.parse(data.unUseTimes),
// 设置内容(需在编辑器就绪后调用)
editor_1.ready(() => {
editor_1.setContent(this.huiminCard.introduce);
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tHuiminCard/tHuiminCard2.js b/cloud-server-management/src/main/webapp/static/modular/system/tHuiminCard/tHuiminCard2.js
index fcde6a0..597ae5b 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tHuiminCard/tHuiminCard2.js
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tHuiminCard/tHuiminCard2.js
@@ -3,10 +3,11 @@
data() {
return {
query: {
- name: '',
- type: '',
+ huiMinName: '',
+ huiMinType: '',
dateRange: [],
- status: ''
+ status: '',
+ huiMinStatus: '',
},
loading: false,
currentPage: 1,
@@ -41,8 +42,10 @@
// 添加请求参数
ajax.set({
- pageNum: this.currentPage,
- pageSize: this.pageSize,
+ current: this.currentPage,
+ size: this.pageSize,
+ startTime: this.query.dateRange.length > 0 ? this.query.dateRange[0] : null,
+ endTime: this.query.dateRange.length > 0 ? this.query.dateRange[1] : null,
...this.query
});
ajax.start();
@@ -111,9 +114,11 @@
},
handleSizeChange(val) {
this.pageSize = val
+ this.handleSearch()
},
handleCurrentChange(val) {
this.currentPage = val
+ this.handleSearch()
},
handleSelectionChange(selection) {
// 多选处理
--
Gitblit v1.7.1