修改产品信息

master
username 1 year ago
parent 73b0040eef
commit 1f9f8fafa8

@ -3,6 +3,7 @@ package com.bs.df.controller;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.bs.df.utils.HtmlUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -50,6 +51,9 @@ public class DfProductArticleController extends BaseController {
LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper();
condition(queryWrapper,dfProductArticle); condition(queryWrapper,dfProductArticle);
List<DfProductArticle> list = dfProductArticleService.list(queryWrapper); List<DfProductArticle> list = dfProductArticleService.list(queryWrapper);
for (DfProductArticle article : list) {
article.setArticleContent(HtmlUtils.stripHtmlTags(article.getArticleContent()));
}
return getDataTable(list); return getDataTable(list);
} }
@ -75,6 +79,10 @@ public class DfProductArticleController extends BaseController {
LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductArticle> queryWrapper = new LambdaQueryWrapper();
condition(queryWrapper,dfProductArticle); condition(queryWrapper,dfProductArticle);
List<DfProductArticle> list = dfProductArticleService.list(queryWrapper); List<DfProductArticle> list = dfProductArticleService.list(queryWrapper);
for (DfProductArticle article : list) {
//去除富文本中的HTML标签
article.setArticleContent(HtmlUtils.stripHtmlTags(article.getArticleContent()));
}
ExcelUtil<DfProductArticle> util = new ExcelUtil<DfProductArticle>(DfProductArticle. class); ExcelUtil<DfProductArticle> util = new ExcelUtil<DfProductArticle>(DfProductArticle. class);
util.exportExcel(response, list, "产品文章数据"); util.exportExcel(response, list, "产品文章数据");
} }
@ -141,7 +149,7 @@ public class DfProductArticleController extends BaseController {
//文章标题 //文章标题
if(Validator.isNotEmpty(dfProductArticle.getArticleTitle())){ if(Validator.isNotEmpty(dfProductArticle.getArticleTitle())){
queryWrapper.eq(DfProductArticle::getArticleTitle,dfProductArticle.getArticleTitle()); queryWrapper.like(DfProductArticle::getArticleTitle,dfProductArticle.getArticleTitle());
} }
//发布时间 //发布时间
@ -149,6 +157,14 @@ public class DfProductArticleController extends BaseController {
queryWrapper.eq(DfProductArticle::getPublishTime,dfProductArticle.getPublishTime()); queryWrapper.eq(DfProductArticle::getPublishTime,dfProductArticle.getPublishTime());
} }
if(Validator.isNotEmpty(dfProductArticle.getPublishTimeBegin())){
queryWrapper.ge(DfProductArticle::getPublishTime,dfProductArticle.getPublishTimeBegin());
}
if(Validator.isNotEmpty(dfProductArticle.getPublishTimeEnd())){
queryWrapper.le(DfProductArticle::getPublishTime,dfProductArticle.getPublishTimeEnd());
}
//文章正文 //文章正文
if(Validator.isNotEmpty(dfProductArticle.getArticleContent())){ if(Validator.isNotEmpty(dfProductArticle.getArticleContent())){
queryWrapper.eq(DfProductArticle::getArticleContent,dfProductArticle.getArticleContent()); queryWrapper.eq(DfProductArticle::getArticleContent,dfProductArticle.getArticleContent());

@ -3,6 +3,7 @@ package com.bs.df.controller;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.bs.df.utils.HtmlUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -50,6 +51,11 @@ public class DfProductInfoController extends BaseController {
LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper();
condition(queryWrapper,dfProductInfo); condition(queryWrapper,dfProductInfo);
List<DfProductInfo> list = dfProductInfoService.list(queryWrapper); List<DfProductInfo> list = dfProductInfoService.list(queryWrapper);
for (DfProductInfo productInfo : list) {
productInfo.setInterestRate(productInfo.getInterestRateBegin() + "%-" + productInfo.getInterestRateEnd() + "%");
productInfo.setProductIntro(HtmlUtils.stripHtmlTags(productInfo.getProductIntro()));
productInfo.setProductDetail(HtmlUtils.stripHtmlTags(productInfo.getProductDetail()));
}
return getDataTable(list); return getDataTable(list);
} }
@ -75,6 +81,11 @@ public class DfProductInfoController extends BaseController {
LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper(); LambdaQueryWrapper<DfProductInfo> queryWrapper = new LambdaQueryWrapper();
condition(queryWrapper,dfProductInfo); condition(queryWrapper,dfProductInfo);
List<DfProductInfo> list = dfProductInfoService.list(queryWrapper); List<DfProductInfo> list = dfProductInfoService.list(queryWrapper);
for (DfProductInfo productInfo : list) {
productInfo.setInterestRate(productInfo.getInterestRateBegin() + "%-" + productInfo.getInterestRateEnd() + "%");
productInfo.setProductIntro(HtmlUtils.stripHtmlTags(productInfo.getProductIntro()));
productInfo.setProductDetail(HtmlUtils.stripHtmlTags(productInfo.getProductDetail()));
}
ExcelUtil<DfProductInfo> util = new ExcelUtil<DfProductInfo>(DfProductInfo. class); ExcelUtil<DfProductInfo> util = new ExcelUtil<DfProductInfo>(DfProductInfo. class);
util.exportExcel(response, list, "产品信息数据"); util.exportExcel(response, list, "产品信息数据");
} }
@ -131,12 +142,12 @@ public class DfProductInfoController extends BaseController {
//产品名称 //产品名称
if(Validator.isNotEmpty(dfProductInfo.getProductName())){ if(Validator.isNotEmpty(dfProductInfo.getProductName())){
queryWrapper.eq(DfProductInfo::getProductName,dfProductInfo.getProductName()); queryWrapper.like(DfProductInfo::getProductName,dfProductInfo.getProductName());
} }
//产品简称 //产品简称
if(Validator.isNotEmpty(dfProductInfo.getSimpleName())){ if(Validator.isNotEmpty(dfProductInfo.getSimpleName())){
queryWrapper.eq(DfProductInfo::getSimpleName,dfProductInfo.getSimpleName()); queryWrapper.like(DfProductInfo::getSimpleName,dfProductInfo.getSimpleName());
} }
//产品类型 //产品类型
@ -154,9 +165,21 @@ public class DfProductInfoController extends BaseController {
queryWrapper.eq(DfProductInfo::getMaxAmount,dfProductInfo.getMaxAmount()); queryWrapper.eq(DfProductInfo::getMaxAmount,dfProductInfo.getMaxAmount());
} }
if(Validator.isNotEmpty(dfProductInfo.getMaxAmountBegin())){
queryWrapper.ge(DfProductInfo::getMaxAmount,dfProductInfo.getMaxAmountBegin());
}
if(Validator.isNotEmpty(dfProductInfo.getMaxAmountEnd())){
queryWrapper.le(DfProductInfo::getMaxAmount,dfProductInfo.getMaxAmountEnd());
}
//年利率(单利) //年利率(单利)
if(Validator.isNotEmpty(dfProductInfo.getInterestRate())){ if(Validator.isNotEmpty(dfProductInfo.getInterestRateBegin())){
queryWrapper.eq(DfProductInfo::getInterestRate,dfProductInfo.getInterestRate()); queryWrapper.ge(DfProductInfo::getInterestRateBegin,dfProductInfo.getInterestRateBegin());
}
if(Validator.isNotEmpty(dfProductInfo.getInterestRateEnd())){
queryWrapper.le(DfProductInfo::getInterestRateEnd,dfProductInfo.getInterestRateEnd());
} }
//产品简介 //产品简介
@ -171,12 +194,32 @@ public class DfProductInfoController extends BaseController {
//上架时间起 //上架时间起
if(Validator.isNotEmpty(dfProductInfo.getListBegin())){ if(Validator.isNotEmpty(dfProductInfo.getListBegin())){
queryWrapper.eq(DfProductInfo::getListBegin,dfProductInfo.getListBegin()); queryWrapper.gt(DfProductInfo::getListBegin,dfProductInfo.getListBegin());
} }
//上架时间止 //上架时间止
if(Validator.isNotEmpty(dfProductInfo.getListEnd())){ if(Validator.isNotEmpty(dfProductInfo.getListEnd())){
queryWrapper.eq(DfProductInfo::getListEnd,dfProductInfo.getListEnd()); queryWrapper.le(DfProductInfo::getListEnd,dfProductInfo.getListEnd());
}
//还款周期
if(Validator.isNotEmpty(dfProductInfo.getRepaymentCycle())){
queryWrapper.eq(DfProductInfo::getRepaymentCycle,dfProductInfo.getRepaymentCycle());
}
//还款方式
if(Validator.isNotEmpty(dfProductInfo.getRepaymentMethod())){
queryWrapper.eq(DfProductInfo::getRepaymentMethod,dfProductInfo.getRepaymentMethod());
}
//展业城市
if(Validator.isNotEmpty(dfProductInfo.getBusinessCity())){
queryWrapper.eq(DfProductInfo::getBusinessCity,dfProductInfo.getBusinessCity());
}
//综合费率
if(Validator.isNotEmpty(dfProductInfo.getCombinedRates())){
queryWrapper.eq(DfProductInfo::getCombinedRates,dfProductInfo.getCombinedRates());
} }
//状态0草稿1上架 //状态0草稿1上架

@ -1,8 +1,13 @@
package com.bs.df.controller; package com.bs.df.controller;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.bs.df.domain.DfProductInfo;
import com.bs.df.service.IDfProductInfoService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -39,6 +44,8 @@ import javax.annotation.Resource;
public class DfProductPosterController extends BaseController { public class DfProductPosterController extends BaseController {
@Resource @Resource
private IDfProductPosterService dfProductPosterService; private IDfProductPosterService dfProductPosterService;
@Resource
private IDfProductInfoService dfProductInfoService;
/** /**
* *
@ -47,8 +54,12 @@ public class DfProductPosterController extends BaseController {
@GetMapping("/pageList") @GetMapping("/pageList")
public TableDataInfo pageList(DfProductPoster dfProductPoster) { public TableDataInfo pageList(DfProductPoster dfProductPoster) {
startPage(); startPage();
LambdaQueryWrapper<DfProductPoster> queryWrapper = new LambdaQueryWrapper(); MPJLambdaWrapper<DfProductPoster> queryWrapper = new MPJLambdaWrapper();
condition(queryWrapper,dfProductPoster); queryWrapper.selectAll(DfProductPoster.class)
.select(DfProductInfo::getProductName)
.disableSubLogicDel()
.leftJoin(DfProductInfo.class,DfProductInfo::getId,DfProductPoster::getProductId);
conditionByMPJ(queryWrapper,dfProductPoster);
List<DfProductPoster> list = dfProductPosterService.list(queryWrapper); List<DfProductPoster> list = dfProductPosterService.list(queryWrapper);
return getDataTable(list); return getDataTable(list);
} }
@ -72,8 +83,12 @@ public class DfProductPosterController extends BaseController {
@Log(title = "产品海报导出", businessType = BusinessType.EXPORT) @Log(title = "产品海报导出", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(HttpServletResponse response, DfProductPoster dfProductPoster) { public void export(HttpServletResponse response, DfProductPoster dfProductPoster) {
LambdaQueryWrapper<DfProductPoster> queryWrapper = new LambdaQueryWrapper(); MPJLambdaWrapper<DfProductPoster> queryWrapper = new MPJLambdaWrapper();
condition(queryWrapper,dfProductPoster); queryWrapper.selectAll(DfProductPoster.class)
.select(DfProductInfo::getProductName)
.disableSubLogicDel()
.leftJoin(DfProductInfo.class,DfProductInfo::getId,DfProductPoster::getProductId);
conditionByMPJ(queryWrapper,dfProductPoster);
List<DfProductPoster> list = dfProductPosterService.list(queryWrapper); List<DfProductPoster> list = dfProductPosterService.list(queryWrapper);
ExcelUtil<DfProductPoster> util = new ExcelUtil<DfProductPoster>(DfProductPoster. class); ExcelUtil<DfProductPoster> util = new ExcelUtil<DfProductPoster>(DfProductPoster. class);
util.exportExcel(response, list, "产品海报数据"); util.exportExcel(response, list, "产品海报数据");
@ -118,6 +133,91 @@ public class DfProductPosterController extends BaseController {
return toAjax(dfProductPosterService.removeBatchByIds(ids)); return toAjax(dfProductPosterService.removeBatchByIds(ids));
} }
private void conditionByMPJ (MPJLambdaWrapper<DfProductPoster> queryWrapper,DfProductPoster dfProductPoster){
//海报id
if(Validator.isNotEmpty(dfProductPoster.getId())){
queryWrapper.eq(DfProductPoster::getId,dfProductPoster.getId());
}
//产品id
if(Validator.isNotEmpty(dfProductPoster.getProductId())){
queryWrapper.eq(DfProductPoster::getProductId,dfProductPoster.getProductId());
}
//产品名称
if(Validator.isNotEmpty(dfProductPoster.getProductName())){
queryWrapper.like(DfProductInfo::getProductName,dfProductPoster.getProductName());
}
//海报分类0产品海报1经纪海报
if(Validator.isNotEmpty(dfProductPoster.getPosterType())){
queryWrapper.eq(DfProductPoster::getPosterType,dfProductPoster.getPosterType());
}
//海报名称
if(Validator.isNotEmpty(dfProductPoster.getPosterName())){
queryWrapper.like(DfProductPoster::getPosterName,dfProductPoster.getPosterName());
}
//海报标签
if(Validator.isNotEmpty(dfProductPoster.getPosterTag())){
queryWrapper.like(DfProductPoster::getPosterTag,dfProductPoster.getPosterTag());
}
//海报图片id
if(Validator.isNotEmpty(dfProductPoster.getPosterFileId())){
queryWrapper.eq(DfProductPoster::getPosterFileId,dfProductPoster.getPosterFileId());
}
//状态0草稿1上架
if(Validator.isNotEmpty(dfProductPoster.getStatus())){
queryWrapper.eq(DfProductPoster::getStatus,dfProductPoster.getStatus());
}
//备注
if(Validator.isNotEmpty(dfProductPoster.getRemark())){
queryWrapper.eq(DfProductPoster::getRemark,dfProductPoster.getRemark());
}
//创建部门
if(Validator.isNotEmpty(dfProductPoster.getCreateDept())){
queryWrapper.eq(DfProductPoster::getCreateDept,dfProductPoster.getCreateDept());
}
//创建人员
if(Validator.isNotEmpty(dfProductPoster.getCreateBy())){
queryWrapper.eq(DfProductPoster::getCreateBy,dfProductPoster.getCreateBy());
}
//创建时间
if(Validator.isNotEmpty(dfProductPoster.getCreateTime())){
queryWrapper.eq(DfProductPoster::getCreateTime,dfProductPoster.getCreateTime());
}
//修改人员
if(Validator.isNotEmpty(dfProductPoster.getUpdateBy())){
queryWrapper.eq(DfProductPoster::getUpdateBy,dfProductPoster.getUpdateBy());
}
//修改时间
if(Validator.isNotEmpty(dfProductPoster.getUpdateTime())){
queryWrapper.eq(DfProductPoster::getUpdateTime,dfProductPoster.getUpdateTime());
}
//删除标志0代表存在 2代表删除
if(Validator.isNotEmpty(dfProductPoster.getDelFlag())){
queryWrapper.eq(DfProductPoster::getDelFlag,dfProductPoster.getDelFlag());
}
//租户id
if(Validator.isNotEmpty(dfProductPoster.getTenantId())){
queryWrapper.eq(DfProductPoster::getTenantId,dfProductPoster.getTenantId());
}
}
/** /**
* *
*/ */

@ -33,13 +33,13 @@ public class DfProductArticle extends BaseEntity{
/** 文章分类0产品文章1经纪文章 */ /** 文章分类0产品文章1经纪文章 */
@Excel(name = "文章分类0产品文章1经纪文章") @Excel(name = "文章分类",dictType = "product_classify")
@ApiModelProperty(value = "文章分类0产品文章1经纪文章") @ApiModelProperty(value = "文章分类0产品文章1经纪文章")
private String articleType; private String articleType;
/** 文章类型 */ /** 文章类型 */
@Excel(name = "文章类型") @Excel(name = "文章类型",dictType = "article_kind")
@ApiModelProperty(value = "文章类型") @ApiModelProperty(value = "文章类型")
private String articleKind; private String articleKind;
@ -64,7 +64,7 @@ public class DfProductArticle extends BaseEntity{
/** 状态0草稿1上架 */ /** 状态0草稿1上架 */
@Excel(name = "状态0草稿1上架") @Excel(name = "状态",dictType = "product_status")
@ApiModelProperty(value = "状态0草稿1上架") @ApiModelProperty(value = "状态0草稿1上架")
private String status; private String status;
@ -74,6 +74,12 @@ public class DfProductArticle extends BaseEntity{
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remark; private String remark;
@TableField(exist = false)
private String publishTimeBegin;
@TableField(exist = false)
private String publishTimeEnd;

@ -1,5 +1,6 @@
package com.bs.df.domain; package com.bs.df.domain;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.bs.common.annotation.Excel; import com.bs.common.annotation.Excel;
@ -45,7 +46,7 @@ public class DfProductInfo extends BaseEntity{
/** 产品类型 */ /** 产品类型 */
@Excel(name = "产品类型") @Excel(name = "产品类型",dictType = "product_type")
@ApiModelProperty(value = "产品类型") @ApiModelProperty(value = "产品类型")
private String productType; private String productType;
@ -57,14 +58,22 @@ public class DfProductInfo extends BaseEntity{
/** 最高额度(元) */ /** 最高额度(元) */
@Excel(name = "最高额度", readConverterExp = "元=") @Excel(name = "最高额度(元)")
@ApiModelProperty(value = "最高额度(元)") @ApiModelProperty(value = "最高额度(元)")
private Long maxAmount; private Long maxAmount;
/** 年利率(单利) */ /** 年利率(单利) */
@Excel(name = "年利率", readConverterExp = "单=利") //@Excel(name = "年利率", readConverterExp = "单=利")
@ApiModelProperty(value = "年利率(单利)") @ApiModelProperty(value = "年利率(单利)")
private BigDecimal interestRateBegin;
//@Excel(name = "年利率止", readConverterExp = "单=利")
@ApiModelProperty(value = "年利率(单利)")
private BigDecimal interestRateEnd;
@Excel(name = "年利率(单利)")
@TableField(exist = false)
private String interestRate; private String interestRate;
/** 产品简介 */ /** 产品简介 */
@ -75,7 +84,7 @@ public class DfProductInfo extends BaseEntity{
/** 产品详情(富文本) */ /** 产品详情(富文本) */
@Excel(name = "产品详情", readConverterExp = "富=文本") @Excel(name = "产品详情")
@ApiModelProperty(value = "产品详情(富文本)") @ApiModelProperty(value = "产品详情(富文本)")
private String productDetail; private String productDetail;
@ -93,9 +102,33 @@ public class DfProductInfo extends BaseEntity{
@ApiModelProperty(value = "上架时间止") @ApiModelProperty(value = "上架时间止")
private Date listEnd; private Date listEnd;
/** 还款周期 */
@Excel(name = "还款周期")
@ApiModelProperty(value = "还款周期")
private String repaymentCycle;
/** 还款方式 */
@Excel(name = "还款方式")
@ApiModelProperty(value = "还款方式")
private String repaymentMethod;
/** 展业城市 */
@Excel(name = "展业城市")
@ApiModelProperty(value = "展业城市")
private String businessCity;
/** 综合费率 */
@Excel(name = "综合费率")
@ApiModelProperty(value = "综合费率")
private String combinedRates;
/** 状态0草稿1上架 */ /** 状态0草稿1上架 */
@Excel(name = "状态0草稿1上架") @Excel(name = "状态",dictType = "product_status")
@ApiModelProperty(value = "状态0草稿1上架") @ApiModelProperty(value = "状态0草稿1上架")
private String status; private String status;
@ -105,6 +138,12 @@ public class DfProductInfo extends BaseEntity{
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remark; private String remark;
@TableField(exist = false)
private Long maxAmountBegin;
@TableField(exist = false)
private Long maxAmountEnd;

@ -31,13 +31,17 @@ public class DfProductPoster extends BaseEntity{
/** 产品id */ /** 产品id */
@Excel(name = "产品id") //@Excel(name = "产品id")
@ApiModelProperty(value = "产品id") @ApiModelProperty(value = "产品id")
private Long productId; private Long productId;
@Excel(name = "产品名称")
@TableField(exist = false)
private String productName;
/** 海报分类0产品海报1经纪海报 */ /** 海报分类0产品海报1经纪海报 */
@Excel(name = "海报分类0产品海报1经纪海报") @Excel(name = "海报分类",dictType = "product_classify")
@ApiModelProperty(value = "海报分类0产品海报1经纪海报") @ApiModelProperty(value = "海报分类0产品海报1经纪海报")
private String posterType; private String posterType;
@ -49,19 +53,19 @@ public class DfProductPoster extends BaseEntity{
/** 海报标签 */ /** 海报标签 */
@Excel(name = "海报标签") @Excel(name = "海报标签",dictType = "poster_tag")
@ApiModelProperty(value = "海报标签") @ApiModelProperty(value = "海报标签")
private String posterTag; private String posterTag;
/** 海报图片id */ /** 海报图片id */
@Excel(name = "海报图片id") @Excel(name = "海报图片")
@ApiModelProperty(value = "海报图片id") @ApiModelProperty(value = "海报图片id")
private String posterFileId; private String posterFileId;
/** 状态0草稿1上架 */ /** 状态0草稿1上架 */
@Excel(name = "状态0草稿1上架") @Excel(name = "状态",dictType = "product_status")
@ApiModelProperty(value = "状态0草稿1上架") @ApiModelProperty(value = "状态0草稿1上架")
private String status; private String status;

@ -0,0 +1,20 @@
package com.bs.df.utils;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HtmlUtils {
// 定义 HTML 标签的正则表达式
private static final Pattern HTML_TAG_PATTERN = Pattern.compile("<[^>]+>");
// 去除 HTML 标签的方法
public static String stripHtmlTags(String html) {
if (html == null || html.trim().isEmpty()) {
return "";
}
Matcher matcher = HTML_TAG_PATTERN.matcher(html);
return matcher.replaceAll("");
}
}

@ -113,7 +113,7 @@ public class SwaggerConfig
// 用ApiInfoBuilder进行定制 // 用ApiInfoBuilder进行定制
return new ApiInfoBuilder() return new ApiInfoBuilder()
// 设置标题 // 设置标题
.title("标题:保税仓库管理系统_接口文档") .title("标题:德富金服经纪推广系统_接口文档")
// 描述 // 描述
.description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...") .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
// 作者信息 // 作者信息

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 保税仓库管理系统 VUE_APP_TITLE = 德富金服经纪推广系统
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'
# 保税仓库管理系统/开发环境 # 德富金服经纪推广系统/开发环境
#VUE_APP_BASE_API = 'http://124.71.134.146:8096/prod-api' #VUE_APP_BASE_API = 'http://124.71.134.146:8096/prod-api'
VUE_APP_BASE_API = 'http://localhost:8080' VUE_APP_BASE_API = 'http://localhost:8080'
# VUE_APP_BASE_API = 'http://tanjunwei.test.jiutianda.cn' # VUE_APP_BASE_API = 'http://tanjunwei.test.jiutianda.cn'

@ -1,8 +1,8 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 保税仓库管理系统 VUE_APP_TITLE = 德富金服经纪推广系统
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'
# 保税仓库管理系统/生产环境 # 德富金服经纪推广系统/生产环境
VUE_APP_BASE_API = '/prod-api' VUE_APP_BASE_API = '/prod-api'

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 保税仓库管理系统 VUE_APP_TITLE = 德富金服经纪推广系统
NODE_ENV = production NODE_ENV = production
# 测试环境配置 # 测试环境配置
ENV = 'staging' ENV = 'staging'
# 保税仓库管理系统/测试环境 # 德富金服经纪推广系统/测试环境
VUE_APP_BASE_API = '/stage-api' VUE_APP_BASE_API = '/stage-api'

@ -1,8 +1,8 @@
{ {
"name": "bs", "name": "bs",
"version": "3.8.6", "version": "3.8.6",
"description": "保税仓库管理系统", "description": "德富金服经纪推广系统",
"author": "保税仓库", "author": "德富金服经纪推广",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 153 KiB

@ -1,30 +1,49 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="文章类型" prop="articleKind"> <el-form-item label="文章分类" prop="articleType">
<el-input <el-select v-model="queryParams.articleType" placeholder="选择文章分类" clearable @keyup.enter.native="handleQuery">
v-model="queryParams.articleKind" <el-option v-for="dict in dict.type.product_classify" :key="dict.value" :label="dict.label"
placeholder="请输入文章类型" :value="dict.value"/>
clearable </el-select>
@keyup.enter.native="handleQuery" </el-form-item>
/> <el-form-item label="文章类型" prop="articleKind">
</el-form-item> <el-select v-model="queryParams.articleKind" placeholder="选择文章类型" clearable @keyup.enter.native="handleQuery">
<el-form-item label="文章标题" prop="articleTitle"> <el-option v-for="dict in dict.type.article_kind" :key="dict.value" :label="dict.label"
<el-input :value="dict.value"/>
v-model="queryParams.articleTitle" </el-select>
placeholder="请输入文章标题" </el-form-item>
clearable <el-form-item label="文章标题" prop="articleTitle">
@keyup.enter.native="handleQuery" <el-input
/> v-model="queryParams.articleTitle"
</el-form-item> placeholder="请输入文章标题"
<el-form-item label="发布时间" prop="publishTime"> clearable
<el-date-picker clearable @keyup.enter.native="handleQuery"
v-model="queryParams.publishTime" />
type="date" </el-form-item>
value-format="yyyy-MM-dd" <el-form-item label="状态" prop="status">
placeholder="请选择发布时间"> <el-select v-model="queryParams.status" placeholder="选择状态" clearable @keyup.enter.native="handleQuery">
</el-date-picker> <el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
</el-form-item> :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="发布时间" prop="publishTimeBegin">
<el-date-picker clearable
style="width: 150px"
v-model="queryParams.publishTimeBegin"
type="date"
value-format="yyyy-MM-dd"
placeholder="发布时间起">
</el-date-picker>
-
<el-date-picker clearable
style="width: 150px"
v-model="queryParams.publishTimeEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="发布时间止">
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -40,7 +59,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['article:article:add']" v-hasPermi="['article:article:add']"
>新增</el-button> >新增
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -51,7 +71,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['article:article:edit']" v-hasPermi="['article:article:edit']"
>修改</el-button> >修改
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -62,7 +83,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['article:article:remove']" v-hasPermi="['article:article:remove']"
>删除</el-button> >删除
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -72,25 +94,39 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['article:article:export']" v-hasPermi="['article:article:export']"
>导出</el-button> >导出
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="articleList" @sort-change="handleSortChange" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="articleList" @sort-change="handleSortChange"
<el-table-column type="selection" width="55" align="center" /> @selection-change="handleSelectionChange">
<el-table-column label="文章id" align="center" prop="id" sortable='custom' /> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="文章分类0产品文章1经纪文章" align="center" prop="articleType" sortable='custom' /> <!-- <el-table-column label="文章分类" align="center" prop="articleType" sortable='custom'/>-->
<el-table-column label="文章类型" align="center" prop="articleKind" sortable='custom' /> <el-table-column label="文章分类" align="center" prop="articleType" sortable='custom'>
<el-table-column label="文章标题" align="center" prop="articleTitle" sortable='custom' /> <template slot-scope="scope">
<el-table-column label="发布时间" align="center" prop="publishTime" width="180" sortable='custom'> <dict-tag :options="dict.type.product_classify" :value="scope.row.articleType"/>
<template slot-scope="scope"> </template>
<span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span> </el-table-column>
</template> <el-table-column label="文章类型" align="center" prop="articleKind" sortable='custom'>
</el-table-column> <template slot-scope="scope">
<el-table-column label="文章正文" align="center" prop="articleContent" sortable='custom' /> <dict-tag :options="dict.type.article_kind" :value="scope.row.articleKind"/>
<el-table-column label="状态0草稿1上架" align="center" prop="status" sortable='custom' /> </template>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' /> </el-table-column>
<el-table-column label="文章标题" align="center" prop="articleTitle" sortable='custom'/>
<el-table-column label="文章正文" align="center" prop="articleContent" sortable='custom' show-overflow-tooltip/>
<el-table-column label="发布时间" align="center" prop="publishTime" width="180" sortable='custom'>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" sortable='custom'>
<template slot-scope="scope">
<dict-tag :options="dict.type.product_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' show-overflow-tooltip/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -99,20 +135,21 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['article:article:edit']" v-hasPermi="['article:article:edit']"
>修改</el-button> >修改
</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['article:article:remove']" v-hasPermi="['article:article:remove']"
>删除</el-button> >删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
hide-on-single-page
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -122,36 +159,78 @@
<!-- 添加或修改产品文章对话框 --> <!-- 添加或修改产品文章对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false"> <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-col :span="12"> <el-row>
<el-form-item label="文章类型" prop="articleKind"> <el-col :span="12">
<el-input v-model="form.articleKind" placeholder="请输入文章类型" /> <el-form-item label="文章分类" prop="articleType">
</el-form-item> <el-select style="width: 100%;" v-model="form.articleType" placeholder="请选择文章分类">
</el-col> <el-option
<el-col :span="12"> v-for="dict in dict.type.product_classify"
<el-form-item label="文章标题" prop="articleTitle"> :key="dict.value"
<el-input v-model="form.articleTitle" placeholder="请输入文章标题" /> :label="dict.label"
</el-form-item> :value="dict.value"
</el-col> />
<el-col :span="12"> </el-select>
<el-form-item label="发布时间" prop="publishTime"> </el-form-item>
<el-date-picker clearable </el-col>
v-model="form.publishTime" <el-col :span="12">
type="date" <el-form-item label="文章类型" prop="articleKind">
value-format="yyyy-MM-dd" <el-select style="width: 100%;" v-model="form.articleKind" placeholder="请选择文章类型">
placeholder="请选择发布时间"> <el-option
</el-date-picker> v-for="dict in dict.type.article_kind"
</el-form-item> :key="dict.value"
</el-col> :label="dict.label"
<el-col :span="12"> :value="dict.value"
<el-form-item label="文章正文"> />
<editor v-model="form.articleContent" :min-height="192"/> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-form-item label="备注" prop="remark"> <el-row>
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-col :span="12">
</el-form-item> <el-form-item label="文章标题" prop="articleTitle">
</el-col> <el-input v-model="form.articleTitle" placeholder="请输入文章标题"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布时间" prop="publishTime">
<el-date-picker clearable
style="width: 100%;"
v-model="form.publishTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择发布时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select style="width: 100%;" v-model="form.status" placeholder="请选择状态">
<el-option
v-for="dict in dict.type.product_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="文章正文">
<editor v-model="form.articleContent" :min-height="192"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -162,180 +241,185 @@
</template> </template>
<script> <script>
import { pageListArticle, getArticle, delArticle, addArticle, updateArticle } from "@/api/article/article"; import {pageListArticle, getArticle, delArticle, addArticle, updateArticle} from "@/api/article/article";
export default { export default {
name: "Article", name: "Article",
data() { dicts: ["product_classify", "article_kind", "product_status"],
return { data() {
// return {
loading: true, //
// loading: true,
ids: [], //
// ids: [],
names: [], //
// names: [],
single: true, //
// single: true,
multiple: true, //
// multiple: true,
showSearch: true, //
// showSearch: true,
total: 0, //
// total: 0,
articleList: [], //
// articleList: [],
title: "", //
// title: "",
open: false, //
// open: false,
queryParams: { //
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
articleType: null, pageSize: 10,
articleKind: null, articleType: null,
articleTitle: null, articleKind: null,
publishTime: null, articleTitle: null,
articleContent: null, publishTime: null,
status: null, publishTimeBegin: null,
}, publishTimeEnd: null,
// articleContent: null,
form: {}, status: null,
// },
rules: { //
articleType: [ form: {},
{ required: true, message: "文章分类0产品文章1经纪文章不能为空", trigger: "change" } //
], rules: {
articleKind: [ articleType: [
{ required: true, message: "文章类型不能为空", trigger: "blur" } {required: true, message: "文章分类", trigger: "change"}
], ],
articleTitle: [ articleKind: [
{ required: true, message: "文章标题不能为空", trigger: "blur" } {required: true, message: "文章类型不能为空", trigger: "blur"}
], ],
publishTime: [ articleTitle: [
{ required: true, message: "发布时间不能为空", trigger: "blur" } {required: true, message: "文章标题不能为空", trigger: "blur"}
], ],
articleContent: [ publishTime: [
{ required: true, message: "文章正文不能为空", trigger: "blur" } {required: true, message: "发布时间不能为空", trigger: "blur"}
], ],
status: [ articleContent: [
{ required: true, message: "状态0草稿1上架不能为空", trigger: "change" } {required: true, message: "文章正文不能为空", trigger: "blur"}
], ],
remark: [ status: [
{ required: true, message: "备注不能为空", trigger: "blur" } {required: true, message: "状态", trigger: "change"}
], ],
} // remark: [
// {required: true, message: "", trigger: "blur"}
// ],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询产品文章列表 */
getList() {
this.loading = true;
pageListArticle(this.queryParams).then(response => {
this.articleList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
articleType: null,
articleKind: null,
articleTitle: null,
publishTime: null,
articleContent: null,
status: null,
remark: null,
}; };
this.resetForm("form");
}, },
created() { //
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList(); this.getList();
}, },
methods: { /** 搜索按钮操作 */
/** 查询产品文章列表 */ handleQuery() {
getList() { this.queryParams.pageNum = 1;
this.loading = true; this.getList();
pageListArticle(this.queryParams).then(response => { },
this.articleList = response.rows; /** 重置按钮操作 */
this.total = response.total; resetQuery() {
this.loading = false; this.resetForm("queryForm");
}).catch(e => { this.handleQuery();
this.loading = false; },
}); //
}, handleSelectionChange(selection) {
// this.ids = selection.map(item => item.id);
cancel() { this.names = selection.map(item => item.id);
this.open = false; this.single = selection.length !== 1;
this.reset(); this.multiple = !selection.length;
}, },
// /** 新增按钮操作 */
reset() { handleAdd() {
this.form = { this.reset();
id: null, this.open = true;
articleType: null, this.form.publishTime = new Date();
articleKind: null, this.title = "添加产品文章";
articleTitle: null, },
publishTime: null, /** 修改按钮操作 */
articleContent: null, handleUpdate(row) {
status: null, this.reset();
remark: null, const id = row.id || this.ids;
}; getArticle(id).then(response => {
this.resetForm("form"); this.form = response.data;
},
//
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.id);
this.single = selection.length!==1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true; this.open = true;
this.title = "添加产品文章"; this.title = "修改产品文章";
}, });
/** 修改按钮操作 */ },
handleUpdate(row) { /** 提交按钮 */
this.reset(); submitForm() {
const id = row.id || this.ids; this.$refs["form"].validate(valid => {
getArticle(id).then(response => { if (valid) {
this.form = response.data; if (this.form.id != null) {
this.open = true; updateArticle(this.form).then(response => {
this.title = "修改产品文章"; this.$modal.msgSuccess("修改成功");
}); this.open = false;
}, this.getList();
/** 提交按钮 */ });
submitForm() { } else {
this.$refs["form"].validate(valid => { addArticle(this.form).then(response => {
if (valid) { this.$modal.msgSuccess("新增成功");
if (this.form.id != null) { this.open = false;
updateArticle(this.form).then(response => { this.getList();
this.$modal.msgSuccess("修改成功"); });
this.open = false;
this.getList();
});
} else {
addArticle(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
} }
}); }
}, });
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const ids = row.id || this.ids; handleDelete(row) {
const names = row.id || this.names; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除产品文章为"' + names + '"的数据项?').then(function() { const names = row.id || this.names;
return delArticle(ids); this.$modal.confirm('是否确认删除产品文章为"' + names + '"的数据项?').then(function () {
}).then(() => { return delArticle(ids);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {
/** 导出按钮操作 */ });
handleExport() { },
this.download('article/article/export', { /** 导出按钮操作 */
...this.queryParams handleExport() {
}, `article_${new Date().getTime()}.xlsx`) this.download('article/article/export', {
} ...this.queryParams
}, `article_${new Date().getTime()}.xlsx`)
}
} }
}; };
</script> </script>

@ -59,7 +59,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-login-footer"> <div class="el-login-footer">
<span>Copyright © 2018-2023 八方莆田 All Rights Reserved.</span> <span>Copyright © 2018-2023 德富金服 All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>
@ -192,7 +192,7 @@ export default {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
background-image: url("../assets/images/login-background.jpg"); background-image: url("../assets/images/login-background4.png");
background-size: cover; background-size: cover;
} }
.title { .title {

@ -1,38 +1,46 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="产品id" prop="productId"> <!-- <el-form-item label="产品id" prop="productId">-->
<el-input <!-- <el-input-->
v-model="queryParams.productId" <!-- v-model="queryParams.productId"-->
placeholder="请输入产品id" <!-- placeholder="请输入产品id"-->
clearable <!-- clearable-->
@keyup.enter.native="handleQuery" <!-- @keyup.enter.native="handleQuery"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="海报名称" prop="posterName"> <el-form-item label="产品名称" prop="productId">
<el-input <el-select style="width: 100%;" filterable v-model="queryParams.productId" placeholder="请选择产品名称" clearable>
v-model="queryParams.posterName" <el-option v-for="info in lsInfo" :key="info.id" :label="info.productName" @keyup.enter.native="handleQuery"
placeholder="请输入海报名称" :value="info.id"/>
clearable </el-select>
@keyup.enter.native="handleQuery" </el-form-item>
/> <el-form-item label="海报分类" prop="posterType">
</el-form-item> <el-select v-model="queryParams.posterType" placeholder="选择海报分类" clearable @keyup.enter.native="handleQuery">
<el-form-item label="海报标签" prop="posterTag"> <el-option v-for="dict in dict.type.product_classify" :key="dict.value" :label="dict.label"
<el-input :value="dict.value"/>
v-model="queryParams.posterTag" </el-select>
placeholder="请输入海报标签" </el-form-item>
clearable <el-form-item label="海报名称" prop="posterName">
@keyup.enter.native="handleQuery" <el-input
/> v-model="queryParams.posterName"
</el-form-item> placeholder="请输入海报名称"
<el-form-item label="海报图片id" prop="posterFileId"> clearable
<el-input @keyup.enter.native="handleQuery"
v-model="queryParams.posterFileId" />
placeholder="请输入海报图片id" </el-form-item>
clearable <el-form-item label="海报标签" prop="posterTag">
@keyup.enter.native="handleQuery" <el-select v-model="queryParams.posterTag" placeholder="选择海报标签" clearable @keyup.enter.native="handleQuery">
/> <el-option v-for="dict in dict.type.poster_tag" :key="dict.value" :label="dict.label"
</el-form-item> :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="选择状态" clearable @keyup.enter.native="handleQuery">
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -48,7 +56,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['poster:poster:add']" v-hasPermi="['poster:poster:add']"
>新增</el-button> >新增
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -59,7 +68,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['poster:poster:edit']" v-hasPermi="['poster:poster:edit']"
>修改</el-button> >修改
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -70,7 +80,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['poster:poster:remove']" v-hasPermi="['poster:poster:remove']"
>删除</el-button> >删除
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -80,21 +91,35 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['poster:poster:export']" v-hasPermi="['poster:poster:export']"
>导出</el-button> >导出
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="posterList" @sort-change="handleSortChange" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="posterList" @sort-change="handleSortChange"
<el-table-column type="selection" width="55" align="center" /> @selection-change="handleSelectionChange">
<el-table-column label="海报id" align="center" prop="id" sortable='custom' /> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="产品id" align="center" prop="productId" sortable='custom' /> <el-table-column label="产品名称" align="center" prop="productName" sortable='custom'/>
<el-table-column label="海报分类0产品海报1经纪海报" align="center" prop="posterType" sortable='custom' /> <!-- <el-table-column label="海报分类" align="center" prop="posterType" sortable='custom'/>-->
<el-table-column label="海报名称" align="center" prop="posterName" sortable='custom' /> <el-table-column label="海报分类" align="center" prop="posterType" sortable='custom'>
<el-table-column label="海报标签" align="center" prop="posterTag" sortable='custom' /> <template slot-scope="scope">
<el-table-column label="海报图片id" align="center" prop="posterFileId" sortable='custom' /> <dict-tag :options="dict.type.product_classify" :value="scope.row.posterType"/>
<el-table-column label="状态0草稿1上架" align="center" prop="status" sortable='custom' /> </template>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' /> </el-table-column>
<el-table-column label="海报名称" align="center" prop="posterName" sortable='custom'/>
<el-table-column label="海报标签" align="center" prop="posterTag" sortable='custom'>
<template slot-scope="scope">
<dict-tag :options="dict.type.poster_tag" :value="scope.row.posterTag"/>
</template>
</el-table-column>
<el-table-column label="海报图片" align="center" prop="posterFileId" sortable='custom'/>
<el-table-column label="状态" align="center" prop="status" sortable='custom'>
<template slot-scope="scope">
<dict-tag :options="dict.type.product_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' show-overflow-tooltip/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -103,20 +128,21 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['poster:poster:edit']" v-hasPermi="['poster:poster:edit']"
>修改</el-button> >修改
</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['poster:poster:remove']" v-hasPermi="['poster:poster:remove']"
>删除</el-button> >删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
hide-on-single-page
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -126,31 +152,62 @@
<!-- 添加或修改产品海报对话框 --> <!-- 添加或修改产品海报对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false"> <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-col :span="12"> <el-row>
<el-form-item label="产品id" prop="productId"> <el-col :span="12">
<el-input v-model="form.productId" placeholder="请输入产品id" /> <el-form-item label="产品名称" prop="productId">
</el-form-item> <el-select style="width: 100%;" filterable v-model="form.productId" placeholder="请选择产品名称"
</el-col> clearable>
<el-col :span="12"> <el-option v-for="info in lsInfo" :key="info.id" :label="info.productName"
<el-form-item label="海报名称" prop="posterName"> :value="info.id"/>
<el-input v-model="form.posterName" placeholder="请输入海报名称" /> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="海报标签" prop="posterTag"> <el-form-item label="海报分类" prop="posterType">
<el-input v-model="form.posterTag" placeholder="请输入海报标签" /> <el-select style="width: 100%;" v-model="form.posterType" placeholder="选择海报分类">
</el-form-item> <el-option v-for="dict in dict.type.product_classify" :key="dict.value" :label="dict.label"
</el-col> :value="dict.value"/>
<el-col :span="12"> </el-select>
<el-form-item label="海报图片id" prop="posterFileId"> </el-form-item>
<el-input v-model="form.posterFileId" placeholder="请输入海报图片id" /> </el-col>
</el-form-item> </el-row>
</el-col> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="备注" prop="remark"> <el-form-item label="海报名称" prop="posterName">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.posterName" placeholder="请输入海报名称"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="海报标签" prop="posterTag">
<el-select style="width: 100%;" v-model="form.posterTag" placeholder="选择海报标签" filterable clearable multiple>
<el-option v-for="dict in dict.type.poster_tag" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="海报图片" prop="posterFileId">
<el-input v-model="form.posterFileId" placeholder="请输入海报图片"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select style="width: 100%;" v-model="form.status" placeholder="选择状态" clearable>
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -161,180 +218,197 @@
</template> </template>
<script> <script>
import { pageListPoster, getPoster, delPoster, addPoster, updatePoster } from "@/api/poster/poster"; import {pageListPoster, getPoster, delPoster, addPoster, updatePoster} from "@/api/poster/poster";
import {listInfo} from "@/api/product/info";
export default { export default {
name: "Poster", name: "Poster",
data() { dicts: ["product_status", "product_classify","poster_tag"],
return { data() {
// return {
loading: true, //
// lsInfo: [],
ids: [], //
// loading: true,
names: [], //
// ids: [],
single: true, //
// names: [],
multiple: true, //
// single: true,
showSearch: true, //
// multiple: true,
total: 0, //
// showSearch: true,
posterList: [], //
// total: 0,
title: "", //
// posterList: [],
open: false, //
// title: "",
queryParams: { //
pageNum: 1, open: false,
pageSize: 10, //
productId: null, queryParams: {
posterType: null, pageNum: 1,
posterName: null, pageSize: 10,
posterTag: null, productId: null,
posterFileId: null, posterType: null,
status: null, posterName: null,
}, posterTag: null,
// posterFileId: null,
form: {}, status: null,
// },
rules: { //
productId: [ form: {},
{ required: true, message: "产品id不能为空", trigger: "blur" } //
], rules: {
posterType: [ productId: [
{ required: true, message: "海报分类0产品海报1经纪海报不能为空", trigger: "change" } {required: true, message: "产品名称不能为空", trigger: "blur"}
], ],
posterName: [ posterType: [
{ required: true, message: "海报名称不能为空", trigger: "blur" } {required: true, message: "海报分类不能为空", trigger: "change"}
], ],
posterTag: [ posterName: [
{ required: true, message: "海报标签不能为空", trigger: "blur" } {required: true, message: "海报名称不能为空", trigger: "blur"}
], ],
posterFileId: [ posterTag: [
{ required: true, message: "海报图片id不能为空", trigger: "blur" } {required: true, message: "海报标签不能为空", trigger: "blur"}
], ],
status: [ posterFileId: [
{ required: true, message: "状态0草稿1上架不能为空", trigger: "change" } {required: true, message: "海报图片不能为空", trigger: "blur"}
], ],
remark: [ status: [
{ required: true, message: "备注不能为空", trigger: "blur" } {required: true, message: "状态不能为空", trigger: "change"}
], ],
} // remark: [
// {required: true, message: "", trigger: "blur"}
// ],
}
};
},
created() {
this.getList();
this.getInfoList();
},
methods: {
getInfoList() {
listInfo().then(response => {
this.lsInfo = response.data;
});
},
/** 查询产品海报列表 */
getList() {
this.loading = true;
pageListPoster(this.queryParams).then(response => {
this.posterList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productId: null,
posterType: null,
posterName: null,
posterTag: null,
posterFileId: null,
status: null,
remark: null,
}; };
this.resetForm("form");
}, },
created() { //
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList(); this.getList();
}, },
methods: { /** 搜索按钮操作 */
/** 查询产品海报列表 */ handleQuery() {
getList() { this.queryParams.pageNum = 1;
this.loading = true; this.getList();
pageListPoster(this.queryParams).then(response => { },
this.posterList = response.rows; /** 重置按钮操作 */
this.total = response.total; resetQuery() {
this.loading = false; this.resetForm("queryForm");
}).catch(e => { this.handleQuery();
this.loading = false; },
}); //
}, handleSelectionChange(selection) {
// this.ids = selection.map(item => item.id);
cancel() { this.names = selection.map(item => item.id);
this.open = false; this.single = selection.length !== 1;
this.reset(); this.multiple = !selection.length;
}, },
// /** 新增按钮操作 */
reset() { handleAdd() {
this.form = { this.reset();
id: null, this.open = true;
productId: null, this.title = "添加产品海报";
posterType: null, },
posterName: null, /** 修改按钮操作 */
posterTag: null, handleUpdate(row) {
posterFileId: null, this.reset();
status: null, const id = row.id || this.ids;
remark: null, getPoster(id).then(response => {
}; this.form = response.data;
this.resetForm("form"); if (this.form.posterTag) {
}, this.form.posterTag = this.form.posterTag.split(',');
// }
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.id);
this.single = selection.length!==1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true; this.open = true;
this.title = "添加产品海报"; this.title = "修改产品海报";
}, });
/** 修改按钮操作 */ },
handleUpdate(row) { /** 提交按钮 */
this.reset(); submitForm() {
const id = row.id || this.ids; this.$refs["form"].validate(valid => {
getPoster(id).then(response => { if (this.form.posterTag) {
this.form = response.data; this.form.posterTag = this.form.posterTag.join(',');
this.open = true; }
this.title = "修改产品海报"; if (valid) {
}); if (this.form.id != null) {
}, updatePoster(this.form).then(response => {
/** 提交按钮 */ this.$modal.msgSuccess("修改成功");
submitForm() { this.open = false;
this.$refs["form"].validate(valid => { this.getList();
if (valid) { });
if (this.form.id != null) { } else {
updatePoster(this.form).then(response => { addPoster(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else {
addPoster(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
} }
}); }
}, });
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const ids = row.id || this.ids; handleDelete(row) {
const names = row.id || this.names; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除产品海报为"' + names + '"的数据项?').then(function() { const names = row.id || this.names;
return delPoster(ids); this.$modal.confirm('是否确认删除产品海报为"' + names + '"的数据项?').then(function () {
}).then(() => { return delPoster(ids);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {
/** 导出按钮操作 */ });
handleExport() { },
this.download('poster/poster/export', { /** 导出按钮操作 */
...this.queryParams handleExport() {
}, `poster_${new Date().getTime()}.xlsx`) this.download('poster/poster/export', {
} ...this.queryParams
}, `产品海报数据_${new Date().getTime()}.xlsx`)
}
} }
}; };
</script> </script>

@ -1,54 +1,119 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="产品名称" prop="productName"> <el-form-item label="产品名称" prop="productName">
<el-input <el-input
v-model="queryParams.productName" v-model="queryParams.productName"
placeholder="请输入产品名称" placeholder="请输入产品名称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="产品简称" prop="simpleName"> <el-form-item label="产品简称" prop="simpleName">
<el-input <el-input
v-model="queryParams.simpleName" v-model="queryParams.simpleName"
placeholder="请输入产品简称" placeholder="请输入产品简称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="最高额度" prop="maxAmount"> <el-form-item label="产品类型" prop="productType">
<el-input <el-select v-model="queryParams.productType" placeholder="选择产品类型" clearable @keyup.enter.native="handleQuery">
v-model="queryParams.maxAmount" <el-option v-for="dict in dict.type.product_type" :key="dict.value" :label="dict.label"
placeholder="请输入最高额度" :value="dict.value"/>
clearable </el-select>
@keyup.enter.native="handleQuery" </el-form-item>
/> <el-form-item label="还款周期" prop="repaymentCycle">
</el-form-item> <el-input
<el-form-item label="年利率" prop="interestRate"> v-model="queryParams.repaymentCycle"
<el-input placeholder="请输入还款周期"
v-model="queryParams.interestRate" clearable
placeholder="请输入年利率" @keyup.enter.native="handleQuery"
clearable />
@keyup.enter.native="handleQuery" </el-form-item>
/> <el-form-item label="还款方式" prop="repaymentMethod">
</el-form-item> <el-input
<el-form-item label="上架时间起" prop="listBegin"> v-model="queryParams.repaymentMethod"
<el-date-picker clearable placeholder="请输入还款方式"
v-model="queryParams.listBegin" clearable
type="date" @keyup.enter.native="handleQuery"
value-format="yyyy-MM-dd" />
placeholder="请选择上架时间起"> </el-form-item>
</el-date-picker> <el-form-item label="展业城市" prop="businessCity">
</el-form-item> <el-input
<el-form-item label="上架时间止" prop="listEnd"> v-model="queryParams.businessCity"
<el-date-picker clearable placeholder="请输入展业城市"
v-model="queryParams.listEnd" clearable
type="date" @keyup.enter.native="handleQuery"
value-format="yyyy-MM-dd" />
placeholder="请选择上架时间止"> </el-form-item>
</el-date-picker> <el-form-item label="综合费率" prop="combinedRates">
</el-form-item> <el-input
v-model="queryParams.combinedRates"
placeholder="请输入综合费率"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="选择状态" clearable @keyup.enter.native="handleQuery">
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="上架时间" prop="listBegin">
<el-date-picker clearable
style="width: 170px"
v-model="queryParams.listBegin"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间起">
</el-date-picker>
-
<el-date-picker clearable
style="width: 170px"
v-model="queryParams.listEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间止">
</el-date-picker>
</el-form-item>
<el-form-item label="年利率(单利)" prop="interestRateBegin">
<el-input-number
:min="0"
:precision="2"
style="width: 150px"
v-model="queryParams.interestRateBegin"
clearable
@keyup.enter.native="handleQuery"
/>
-
<el-input-number
:min="0"
:precision="2"
style="width: 150px"
v-model="queryParams.interestRateEnd"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最高额度(元)" prop="maxAmount">
<el-input-number
:min="0"
v-model="queryParams.maxAmountBegin"
style="width: 150px"
clearable
@keyup.enter.native="handleQuery"
/>
-
<el-input-number
:min="0"
style="width: 150px"
v-model="queryParams.maxAmountEnd"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
@ -64,7 +129,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['product:info:add']" v-hasPermi="['product:info:add']"
>新增</el-button> >新增
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -75,7 +141,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['product:info:edit']" v-hasPermi="['product:info:edit']"
>修改</el-button> >修改
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -86,7 +153,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['product:info:remove']" v-hasPermi="['product:info:remove']"
>删除</el-button> >删除
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -96,35 +164,48 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['product:info:export']" v-hasPermi="['product:info:export']"
>导出</el-button> >导出
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="infoList" @sort-change="handleSortChange"
<el-table-column type="selection" width="55" align="center" /> @selection-change="handleSelectionChange">
<el-table-column label="产品id" align="center" prop="id" sortable='custom' /> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="产品名称" align="center" prop="productName" sortable='custom' /> <el-table-column label="产品名称" align="center" prop="productName" sortable='custom'/>
<el-table-column label="产品简称" align="center" prop="simpleName" sortable='custom' /> <el-table-column label="产品简称" align="center" prop="simpleName" sortable='custom'/>
<el-table-column label="产品类型" align="center" prop="productType" sortable='custom' /> <el-table-column label="产品类型" align="center" prop="productType" sortable='custom'>
<el-table-column label="产品细类" align="center" prop="productSubtype" sortable='custom' /> <template slot-scope="scope">
<el-table-column label="最高额度" align="center" prop="maxAmount" sortable='custom' /> <dict-tag :options="dict.type.product_type" :value="scope.row.productType"/>
<el-table-column label="年利率" align="center" prop="interestRate" sortable='custom' /> </template>
<el-table-column label="产品简介" align="center" prop="productIntro" sortable='custom' /> </el-table-column>
<el-table-column label="产品详情" align="center" prop="productDetail" sortable='custom' /> <el-table-column label="产品细类" align="center" prop="productSubtype" sortable='custom'/>
<el-table-column label="上架时间起" align="center" prop="listBegin" width="180" sortable='custom'> <el-table-column label="最高额度(元)" align="center" prop="maxAmount" sortable='custom'/>
<template slot-scope="scope"> <el-table-column label="年利率(单利)" align="center" prop="interestRate" sortable='custom'/>
<span>{{ parseTime(scope.row.listBegin, '{y}-{m}-{d}') }}</span> <el-table-column label="产品简介" align="center" prop="productIntro" sortable='custom' show-overflow-tooltip/>
</template> <el-table-column label="产品详情" align="center" prop="productDetail" sortable='custom' show-overflow-tooltip/>
</el-table-column> <el-table-column label="还款周期" align="center" prop="repaymentCycle" sortable='custom'/>
<el-table-column label="上架时间止" align="center" prop="listEnd" width="180" sortable='custom'> <el-table-column label="还款方式" align="center" prop="repaymentMethod" sortable='custom'/>
<template slot-scope="scope"> <el-table-column label="展业城市" align="center" prop="businessCity" sortable='custom'/>
<span>{{ parseTime(scope.row.listEnd, '{y}-{m}-{d}') }}</span> <el-table-column label="综合费率" align="center" prop="combinedRates" sortable='custom'/>
</template> <el-table-column label="上架时间起" align="center" prop="listBegin" width="150" sortable='custom'>
</el-table-column> <template slot-scope="scope">
<el-table-column label="状态0草稿1上架" align="center" prop="status" sortable='custom' /> <span>{{ parseTime(scope.row.listBegin, '{y}-{m}-{d}') }}</span>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' /> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> </el-table-column>
<el-table-column label="上架时间止" align="center" prop="listEnd" width="150" sortable='custom'>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.listEnd, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" sortable='custom'>
<template slot-scope="scope">
<dict-tag :options="dict.type.product_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" sortable='custom' show-overflow-tooltip/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -132,20 +213,21 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['product:info:edit']" v-hasPermi="['product:info:edit']"
>修改</el-button> >修改
</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['product:info:remove']" v-hasPermi="['product:info:remove']"
>删除</el-button> >删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
hide-on-single-page
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -154,62 +236,126 @@
<!-- 添加或修改产品信息对话框 --> <!-- 添加或修改产品信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false"> <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="115px">
<el-col :span="12"> <el-row>
<el-form-item label="产品名称" prop="productName"> <el-col :span="8">
<el-input v-model="form.productName" placeholder="请输入产品名称" /> <el-form-item label="产品名称" prop="productName">
</el-form-item> <el-input v-model="form.productName" placeholder="请输入产品名称"/>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="产品简称" prop="simpleName"> <el-col :span="8">
<el-input v-model="form.simpleName" placeholder="请输入产品简称" /> <el-form-item label="产品简称" prop="simpleName">
</el-form-item> <el-input v-model="form.simpleName" placeholder="请输入产品简称"/>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="最高额度" prop="maxAmount"> <el-col :span="8">
<el-input v-model="form.maxAmount" placeholder="请输入最高额度" /> <el-form-item label="产品类型" prop="productType">
</el-form-item> <el-select style="width: 100%;" v-model="form.productType" placeholder="选择产品类型" clearable>
</el-col> <el-option v-for="dict in dict.type.product_type" :key="dict.value" :label="dict.label"
<el-col :span="12"> :value="dict.value"/>
<el-form-item label="年利率" prop="interestRate"> </el-select>
<el-input v-model="form.interestRate" placeholder="请输入年利率" /> </el-form-item>
</el-form-item> </el-col>
</el-col> </el-row>
<el-col :span="12"> <el-row>
<el-form-item label="产品简介" prop="productIntro"> <el-col :span="8">
<el-input v-model="form.productIntro" type="textarea" placeholder="请输入内容" /> <el-form-item label="产品细类" prop="productSubtype">
</el-form-item> <el-input v-model="form.productSubtype" placeholder="请输入产品细类"/>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="产品详情" prop="productDetail"> <el-col :span="12">
<el-input v-model="form.productDetail" type="textarea" placeholder="请输入内容" /> <el-form-item label="年利率(单利%)" prop="interestRateBegin">
</el-form-item> <el-input-number v-model="form.interestRateBegin" style="width: 160px;" :min="0" :precision="2"/>
</el-col> -
<el-col :span="12"> <el-input-number v-model="form.interestRateEnd" style="width: 160px;" :min="0" :precision="2"/>
<el-form-item label="上架时间起" prop="listBegin"> </el-form-item>
<el-date-picker clearable </el-col>
v-model="form.listBegin" </el-row>
type="date" <el-row>
value-format="yyyy-MM-dd" <el-col :span="8">
placeholder="请选择上架时间起"> <el-form-item label="最高额度(元)" prop="maxAmount">
</el-date-picker> <el-input-number v-model="form.maxAmount" placeholder="请输入最高额度(元)" style="width: 100%;" :min="0"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="上架时间止" prop="listEnd"> <el-col :span="8">
<el-date-picker clearable <el-form-item label="还款周期" prop="repaymentCycle">
v-model="form.listEnd" <el-input v-model="form.repaymentCycle" placeholder="请输入还款周期"/>
type="date" </el-form-item>
value-format="yyyy-MM-dd" </el-col>
placeholder="请选择上架时间止"> <el-col :span="8">
</el-date-picker> <el-form-item label="还款方式" prop="repaymentMethod">
</el-form-item> <el-input v-model="form.repaymentMethod" placeholder="请输入还款方式"/>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="备注" prop="remark"> </el-row>
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-row>
</el-form-item> <el-col :span="8">
</el-col> <el-form-item label="展业城市" prop="businessCity">
<el-input v-model="form.businessCity" placeholder="请输入展业城市"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="综合费率" prop="combinedRates">
<el-input v-model="form.combinedRates" placeholder="请输入综合费率"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上架时间起" prop="listBegin">
<el-date-picker clearable
v-model="form.listBegin"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间起"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="上架时间止" prop="listEnd">
<el-date-picker clearable
v-model="form.listEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择上架时间止"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-select style="width: 100%;" v-model="form.status" placeholder="选择状态" clearable>
<el-option v-for="dict in dict.type.product_status" :key="dict.value" :label="dict.label"
:value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品简介" prop="productIntro">
<editor v-model="form.productIntro" :min-height="92"/>
<!-- <el-input v-model="form.productIntro" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="产品详情" prop="productDetail">
<editor v-model="form.productDetail" :min-height="152"/>
<!-- <el-input v-model="form.productDetail" type="textarea" placeholder="请输入内容"/>-->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -220,205 +366,235 @@
</template> </template>
<script> <script>
import { pageListInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/product/info"; import {pageListInfo, getInfo, delInfo, addInfo, updateInfo} from "@/api/product/info";
export default { export default {
name: "Info", name: "Info",
data() { dicts: ['product_type', "product_status"],
return { data() {
// return {
loading: true, //
// loading: true,
ids: [], //
// ids: [],
names: [], //
// names: [],
single: true, //
// single: true,
multiple: true, //
// multiple: true,
showSearch: true, //
// showSearch: true,
total: 0, //
// total: 0,
infoList: [], //
// infoList: [],
title: "", //
// title: "",
open: false, //
// open: false,
queryParams: { //
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
productName: null, pageSize: 10,
simpleName: null, productName: null,
productType: null, simpleName: null,
productSubtype: null, productType: null,
maxAmount: null, productSubtype: null,
interestRate: null, maxAmount: null,
productIntro: null, interestRate: null,
productDetail: null, productIntro: null,
listBegin: null, productDetail: null,
listEnd: null, listBegin: null,
status: null, listEnd: null,
}, status: null,
// maxAmountBegin: undefined,
form: {}, maxAmountEnd: undefined,
// },
rules: { //
productName: [ form: {},
{ required: true, message: "产品名称不能为空", trigger: "blur" } //
], rules: {
simpleName: [ productName: [
{ required: true, message: "产品简称不能为空", trigger: "blur" } {required: true, message: "产品名称不能为空", trigger: "blur"}
], ],
productType: [ simpleName: [
{ required: true, message: "产品类型不能为空", trigger: "change" } {required: true, message: "产品简称不能为空", trigger: "blur"}
], ],
productSubtype: [ productType: [
{ required: true, message: "产品细类不能为空", trigger: "change" } {required: true, message: "产品类型不能为空", trigger: "change"}
], ],
maxAmount: [ // productSubtype: [
{ required: true, message: "最高额度不能为空", trigger: "blur" } // {required: true, message: "", trigger: "change"}
], // ],
interestRate: [ maxAmount: [
{ required: true, message: "年利率不能为空", trigger: "blur" } {required: true, message: "最高额度(元)不能为空", trigger: "blur"}
], ],
productIntro: [ interestRateBegin: [
{ required: true, message: "产品简介不能为空", trigger: "blur" } {required: true, message: "年利率(单利)不能为空", trigger: "blur"}
], ],
productDetail: [ // productIntro: [
{ required: true, message: "产品详情不能为空", trigger: "blur" } // {required: true, message: "", trigger: "blur"}
], // ],
listBegin: [ // productDetail: [
{ required: true, message: "上架时间起不能为空", trigger: "blur" } // {required: true, message: "", trigger: "blur"}
], // ],
listEnd: [ // listBegin: [
{ required: true, message: "上架时间止不能为空", trigger: "blur" } // {required: true, message: "", trigger: "blur"}
], // ],
status: [ // listEnd: [
{ required: true, message: "状态0草稿1上架不能为空", trigger: "change" } // {required: true, message: "", trigger: "blur"}
], // ],
remark: [ status: [
{ required: true, message: "备注不能为空", trigger: "blur" } {required: true, message: "状态不能为空", trigger: "change"}
], ],
} // remark: [
// {required: true, message: "", trigger: "blur"}
// ],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询产品信息列表 */
getList() {
this.loading = true;
pageListInfo(this.queryParams).then(response => {
this.infoList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(e => {
this.loading = false;
});
// if (!isNaN(this.queryParams.maxAmountBegin) && !isNaN(this.queryParams.maxAmountEnd)) {
// pageListInfo(this.queryParams).then(response => {
// this.infoList = response.rows;
// this.total = response.total;
// this.loading = false;
// }).catch(e => {
// this.loading = false;
// });
// } else {
// this.$modal.msgWarning("")
// this.queryParams.maxAmountBegin = undefined;
// this.queryParams.maxAmountEnd = undefined;
// pageListInfo(this.queryParams).then(response => {
// this.infoList = response.rows;
// this.total = response.total;
// this.loading = false;
// }).catch(e => {
// this.loading = false;
// });
// }
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
productName: null,
simpleName: null,
productType: null,
productSubtype: null,
maxAmount: null,
interestRateBegin: null,
interestRateEnd: null,
productIntro: null,
productDetail: null,
listBegin: null,
listEnd: null,
status: null,
remark: null,
maxAmountBegin: null,
maxAmountEnd: null,
}; };
this.resetForm("form");
}, },
created() { //
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList(); this.getList();
}, },
methods: { /** 搜索按钮操作 */
/** 查询产品信息列表 */ handleQuery() {
getList() { this.queryParams.pageNum = 1;
this.loading = true; this.getList();
pageListInfo(this.queryParams).then(response => { },
this.infoList = response.rows; /** 重置按钮操作 */
this.total = response.total; resetQuery() {
this.loading = false; this.resetForm("queryForm");
}).catch(e => { this.queryParams.maxAmountBegin = undefined;
this.loading = false; this.queryParams.maxAmountEnd = undefined;
}); this.queryParams.interestRateEnd = undefined;
}, this.handleQuery();
// },
cancel() { //
this.open = false; handleSelectionChange(selection) {
this.reset(); this.ids = selection.map(item => item.id);
}, this.names = selection.map(item => item.id);
// this.single = selection.length !== 1;
reset() { this.multiple = !selection.length;
this.form = { },
id: null, /** 新增按钮操作 */
productName: null, handleAdd() {
simpleName: null, this.reset();
productType: null, this.open = true;
productSubtype: null, this.title = "添加产品信息";
maxAmount: null, },
interestRate: null, /** 修改按钮操作 */
productIntro: null, handleUpdate(row) {
productDetail: null, this.reset();
listBegin: null, const id = row.id || this.ids;
listEnd: null, getInfo(id).then(response => {
status: null, this.form = response.data;
remark: null,
};
this.resetForm("form");
},
//
handleSortChange(col) {
this.$sortBy(col, this.queryParams);
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.names = selection.map(item => item.id);
this.single = selection.length!==1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true; this.open = true;
this.title = "添加产品信息"; this.title = "修改产品信息";
}, });
/** 修改按钮操作 */ },
handleUpdate(row) { /** 提交按钮 */
this.reset(); submitForm() {
const id = row.id || this.ids; this.$refs["form"].validate(valid => {
getInfo(id).then(response => { if (valid) {
this.form = response.data; if (this.form.id != null) {
this.open = true; updateInfo(this.form).then(response => {
this.title = "修改产品信息"; this.$modal.msgSuccess("修改成功");
}); this.open = false;
}, this.getList();
/** 提交按钮 */ });
submitForm() { } else {
this.$refs["form"].validate(valid => { addInfo(this.form).then(response => {
if (valid) { this.$modal.msgSuccess("新增成功");
if (this.form.id != null) { this.open = false;
updateInfo(this.form).then(response => { this.getList();
this.$modal.msgSuccess("修改成功"); });
this.open = false;
this.getList();
});
} else {
addInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
} }
}); }
}, });
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const ids = row.id || this.ids; handleDelete(row) {
const names = row.id || this.names; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除产品信息为"' + names + '"的数据项?').then(function() { const names = row.id || this.names;
return delInfo(ids); this.$modal.confirm('是否确认删除产品信息为"' + names + '"的数据项?').then(function () {
}).then(() => { return delInfo(ids);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {
/** 导出按钮操作 */ });
handleExport() { },
this.download('product/info/export', { /** 导出按钮操作 */
...this.queryParams handleExport() {
}, `info_${new Date().getTime()}.xlsx`) this.download('product/info/export', {
} ...this.queryParams
}, `产品信息数据_${new Date().getTime()}.xlsx`)
}
} }
}; };
</script> </script>

@ -1,7 +1,7 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">保税仓库管理系统</h3> <h3 class="title">德富金服经纪推广系统</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin') const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '保税仓库管理系统' // 网页标题 const name = process.env.VUE_APP_TITLE || '德富金服经纪推广系统' // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口

Loading…
Cancel
Save