基本信息管理:banner 小程序banner

main
王宇航 2024-08-02 10:08:48 +08:00
parent 12c8eb5bc7
commit 5ae7336862
57 changed files with 2638 additions and 55 deletions

View File

@ -0,0 +1,71 @@
package com.wyh.admin.controller.basic.banner;
import com.wyh.admin.aop.Log;
import com.wyh.admin.service.IBannerService;
import com.wyh.admin.validate.basic.banner.BannerCreateValidate;
import com.wyh.admin.validate.basic.banner.BannerSearchValidate;
import com.wyh.admin.validate.basic.banner.BannerUpdateValidate;
import com.wyh.admin.validate.commons.IdValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.banner.BannerDetailVo;
import com.wyh.admin.vo.basic.banner.BannerListedVo;
import com.wyh.common.core.AjaxResult;
import com.wyh.common.core.PageResult;
import com.wyh.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("api/banner")
@Api(tags = "banner信息管理")
public class BannerController {
@Resource
IBannerService iBannerService;
@GetMapping("/list")
@ApiOperation(value="banner信息列表")
public AjaxResult<PageResult<BannerListedVo>> list(@Validated PageValidate pageValidate,
@Validated BannerSearchValidate searchValidate) {
PageResult<BannerListedVo> list = iBannerService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="banner信息详情")
public AjaxResult<BannerDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
BannerDetailVo detail = iBannerService.detail(id);
return AjaxResult.success(detail);
}
@Log(title = "banner信息新增")
@PostMapping("/add")
@ApiOperation(value="banner信息新增")
public AjaxResult<Object> add(@Validated @RequestBody BannerCreateValidate createValidate) {
iBannerService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "banner信息编辑")
@PostMapping("/edit")
@ApiOperation(value="banner信息编辑")
public AjaxResult<Object> edit(@Validated @RequestBody BannerUpdateValidate updateValidate) {
iBannerService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "banner信息删除")
@PostMapping("/del")
@ApiOperation(value="banner信息删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iBannerService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,70 @@
package com.wyh.admin.controller.basic.bannerfront;
import com.wyh.admin.aop.Log;
import com.wyh.admin.service.IBannerFrontService;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontCreateValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontSearchValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontUpdateValidate;
import com.wyh.admin.validate.commons.IdValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontDetailVo;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontListedVo;
import com.wyh.common.core.AjaxResult;
import com.wyh.common.core.PageResult;
import com.wyh.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("api/bannerfront")
@Api(tags = "小程序banner管理管理")
public class BannerFrontController {
@Resource
IBannerFrontService iBannerFrontService;
@GetMapping("/list")
@ApiOperation(value="小程序banner管理列表")
public AjaxResult<PageResult<BannerFrontListedVo>> list(@Validated PageValidate pageValidate,
@Validated BannerFrontSearchValidate searchValidate) {
PageResult<BannerFrontListedVo> list = iBannerFrontService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="小程序banner管理详情")
public AjaxResult<BannerFrontDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
BannerFrontDetailVo detail = iBannerFrontService.detail(id);
return AjaxResult.success(detail);
}
@Log(title = "小程序banner管理新增")
@PostMapping("/add")
@ApiOperation(value="小程序banner管理新增")
public AjaxResult<Object> add(@Validated @RequestBody BannerFrontCreateValidate createValidate) {
iBannerFrontService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "小程序banner管理编辑")
@PostMapping("/edit")
@ApiOperation(value="小程序banner管理编辑")
public AjaxResult<Object> edit(@Validated @RequestBody BannerFrontUpdateValidate updateValidate) {
iBannerFrontService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "小程序banner管理删除")
@PostMapping("/del")
@ApiOperation(value="小程序banner管理删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iBannerFrontService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,69 @@
package com.wyh.admin.controller.basic.company;
import com.wyh.admin.aop.Log;
import com.wyh.admin.service.ICaseService;
import com.wyh.admin.validate.basic.company.CaseCreateValidate;
import com.wyh.admin.validate.basic.company.CaseSearchValidate;
import com.wyh.admin.validate.basic.company.CaseUpdateValidate;
import com.wyh.admin.validate.commons.IdValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.company.CaseDetailVo;
import com.wyh.admin.vo.basic.company.CaseListedVo;
import com.wyh.common.core.AjaxResult;
import com.wyh.common.core.PageResult;
import com.wyh.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("api/case")
@Api(tags = "成功案例信息管理")
public class CaseController {
@Resource
ICaseService iCaseService;
@GetMapping("/list")
@ApiOperation(value="成功案例信息列表")
public AjaxResult<PageResult<CaseListedVo>> list(@Validated PageValidate pageValidate,
@Validated CaseSearchValidate searchValidate) {
PageResult<CaseListedVo> list = iCaseService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="成功案例信息详情")
public AjaxResult<CaseDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
CaseDetailVo detail = iCaseService.detail(id);
return AjaxResult.success(detail);
}
@Log(title = "成功案例信息新增")
@PostMapping("/add")
@ApiOperation(value="成功案例信息新增")
public AjaxResult<Object> add(@Validated @RequestBody CaseCreateValidate createValidate) {
iCaseService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "成功案例信息编辑")
@PostMapping("/edit")
@ApiOperation(value="成功案例信息编辑")
public AjaxResult<Object> edit(@Validated @RequestBody CaseUpdateValidate updateValidate) {
iCaseService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "成功案例信息删除")
@PostMapping("/del")
@ApiOperation(value="成功案例信息删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iCaseService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -4,10 +4,10 @@ import com.alibaba.fastjson2.JSONArray;
import com.wyh.admin.aop.Log;
import com.wyh.admin.service.IGoodsCateService;
import com.wyh.admin.validate.commons.IdValidate;
import com.wyh.admin.validate.GoodsCateCreateValidate;
import com.wyh.admin.validate.GoodsCateUpdateValidate;
import com.wyh.admin.validate.GoodsCateSearchValidate;
import com.wyh.admin.vo.GoodsCateDetailVo;
import com.wyh.admin.validate.goods.GoodsCateCreateValidate;
import com.wyh.admin.vo.goods.GoodsCateDetailVo;
import com.wyh.common.core.AjaxResult;
import com.wyh.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;

View File

@ -0,0 +1,61 @@
package com.wyh.admin.service;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontCreateValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontSearchValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontDetailVo;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontListedVo;
import com.wyh.common.core.PageResult;
/**
* banner
* @author wyh
*/
public interface IBannerFrontService {
/**
* banner
*
* @author wyh
* @param pageValidate
* @param searchValidate
* @return PageResult<BannerFrontListedVo>
*/
PageResult<BannerFrontListedVo> list(PageValidate pageValidate, BannerFrontSearchValidate searchValidate);
/**
* banner
*
* @author wyh
* @param id ID
* @return BannerFrontDetailVo
*/
BannerFrontDetailVo detail(Integer id);
/**
* banner
*
* @author wyh
* @param createValidate
*/
void add(BannerFrontCreateValidate createValidate);
/**
* banner
*
* @author wyh
* @param updateValidate
*/
void edit(BannerFrontUpdateValidate updateValidate);
/**
* banner
*
* @author wyh
* @param id ID
*/
void del(Integer id);
}

View File

@ -0,0 +1,61 @@
package com.wyh.admin.service;
import com.wyh.admin.validate.basic.banner.BannerCreateValidate;
import com.wyh.admin.validate.basic.banner.BannerSearchValidate;
import com.wyh.admin.validate.basic.banner.BannerUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.banner.BannerDetailVo;
import com.wyh.admin.vo.basic.banner.BannerListedVo;
import com.wyh.common.core.PageResult;
/**
* banner
* @author LikeAdmin
*/
public interface IBannerService {
/**
* banner
*
* @author LikeAdmin
* @param pageValidate
* @param searchValidate
* @return PageResult<BannerListedVo>
*/
PageResult<BannerListedVo> list(PageValidate pageValidate, BannerSearchValidate searchValidate);
/**
* banner
*
* @author LikeAdmin
* @param id ID
* @return BannerDetailVo
*/
BannerDetailVo detail(Integer id);
/**
* banner
*
* @author LikeAdmin
* @param createValidate
*/
void add(BannerCreateValidate createValidate);
/**
* banner
*
* @author LikeAdmin
* @param updateValidate
*/
void edit(BannerUpdateValidate updateValidate);
/**
* banner
*
* @author LikeAdmin
* @param id ID
*/
void del(Integer id);
}

View File

@ -0,0 +1,61 @@
package com.wyh.admin.service;
import com.wyh.admin.validate.basic.company.CaseCreateValidate;
import com.wyh.admin.validate.basic.company.CaseSearchValidate;
import com.wyh.admin.validate.basic.company.CaseUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.company.CaseDetailVo;
import com.wyh.admin.vo.basic.company.CaseListedVo;
import com.wyh.common.core.PageResult;
/**
*
* @author wyh
*/
public interface ICaseService {
/**
*
*
* @author wyh
* @param pageValidate
* @param searchValidate
* @return PageResult<CaseListedVo>
*/
PageResult<CaseListedVo> list(PageValidate pageValidate, CaseSearchValidate searchValidate);
/**
*
*
* @author wyh
* @param id ID
* @return CaseDetailVo
*/
CaseDetailVo detail(Integer id);
/**
*
*
* @author wyh
* @param createValidate
*/
void add(CaseCreateValidate createValidate);
/**
*
*
* @author wyh
* @param updateValidate
*/
void edit(CaseUpdateValidate updateValidate);
/**
*
*
* @author wyh
* @param id ID
*/
void del(Integer id);
}

View File

@ -1,10 +1,10 @@
package com.wyh.admin.service;
import com.alibaba.fastjson2.JSONArray;
import com.wyh.admin.validate.GoodsCateCreateValidate;
import com.wyh.admin.validate.GoodsCateUpdateValidate;
import com.wyh.admin.validate.GoodsCateSearchValidate;
import com.wyh.admin.vo.GoodsCateDetailVo;
import com.wyh.admin.validate.goods.GoodsCateCreateValidate;
import com.wyh.admin.vo.goods.GoodsCateDetailVo;
/**
*

View File

@ -0,0 +1,168 @@
package com.wyh.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.query.MPJQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wyh.admin.service.IBannerFrontService;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontCreateValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontSearchValidate;
import com.wyh.admin.validate.basic.bannerfront.BannerFrontUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontDetailVo;
import com.wyh.admin.vo.basic.bannerfront.BannerFrontListedVo;
import com.wyh.common.config.GlobalConfig;
import com.wyh.common.core.PageResult;
import com.wyh.common.entity.basic.bannerfront.BannerFront;
import com.wyh.common.mapper.basic.bannerfront.BannerFrontMapper;
import com.wyh.common.util.ListUtils;
import com.wyh.common.util.TimeUtils;
import com.wyh.common.util.UrlUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.*;
/**
* banner
* @author wyh
*/
@Service
public class BannerFrontServiceImpl implements IBannerFrontService {
@Resource
BannerFrontMapper bannerFrontMapper;
/**
* banner
*
* @author wyh
* @param pageValidate
* @param searchValidate
* @return PageResult<BannerFrontListedVo>
*/
@Override
public PageResult<BannerFrontListedVo> list(PageValidate pageValidate, BannerFrontSearchValidate searchValidate) {
Integer page = pageValidate.getPageNo();
Integer limit = pageValidate.getPageSize();
QueryWrapper<BannerFront> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
bannerFrontMapper.setSearch(queryWrapper, searchValidate, new String[]{
"like:title:str",
"=:isShow@is_show:int",
"like:linkAddress@link_address:int",
});
IPage<BannerFront> iPage = bannerFrontMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<BannerFrontListedVo> list = new LinkedList<>();
for(BannerFront item : iPage.getRecords()) {
BannerFrontListedVo vo = new BannerFrontListedVo();
BeanUtils.copyProperties(item, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(item.getImg()));
vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime()));
vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime()));
list.add(vo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
* banner
*
* @author wyh
* @param id
* @return BannerFront
*/
@Override
public BannerFrontDetailVo detail(Integer id) {
BannerFront model = bannerFrontMapper.selectOne(
new QueryWrapper<BannerFront>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
BannerFrontDetailVo vo = new BannerFrontDetailVo();
BeanUtils.copyProperties(model, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(model.getImg()));
return vo;
}
/**
* banner
*
* @author wyh
* @param createValidate
*/
@Override
public void add(BannerFrontCreateValidate createValidate) {
BannerFront model = new BannerFront();
model.setTitle(createValidate.getTitle());
model.setCreateTime(System.currentTimeMillis() / 1000);
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(createValidate.getSort());
model.setIsShow(createValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(createValidate.getImg()));
model.setLinkAddress(createValidate.getLinkAddress());
bannerFrontMapper.insert(model);
}
/**
* banner
*
* @author wyh
* @param updateValidate
*/
@Override
public void edit(BannerFrontUpdateValidate updateValidate) {
BannerFront model = bannerFrontMapper.selectOne(
new QueryWrapper<BannerFront>()
.eq("id", updateValidate.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setId(updateValidate.getId());
model.setTitle(updateValidate.getTitle());
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(updateValidate.getSort());
model.setIsShow(updateValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(updateValidate.getImg()));
model.setLinkAddress(updateValidate.getLinkAddress());
bannerFrontMapper.updateById(model);
}
/**
* banner
*
* @author wyh
* @param id ID
*/
@Override
public void del(Integer id) {
BannerFront model = bannerFrontMapper.selectOne(
new QueryWrapper<BannerFront>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setIsDelete(1);
model.setDeleteTime(System.currentTimeMillis() / 1000);
bannerFrontMapper.updateById(model);
}
}

View File

@ -0,0 +1,167 @@
package com.wyh.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.query.MPJQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wyh.admin.service.IBannerService;
import com.wyh.admin.validate.basic.banner.BannerCreateValidate;
import com.wyh.admin.validate.basic.banner.BannerSearchValidate;
import com.wyh.admin.validate.basic.banner.BannerUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.banner.BannerDetailVo;
import com.wyh.admin.vo.basic.banner.BannerListedVo;
import com.wyh.common.config.GlobalConfig;
import com.wyh.common.core.PageResult;
import com.wyh.common.entity.basic.banner.Banner;
import com.wyh.common.mapper.basic.banner.BannerMapper;
import com.wyh.common.util.TimeUtils;
import com.wyh.common.util.UrlUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.*;
/**
* banner
* @author LikeAdmin
*/
@Service
public class BannerServiceImpl implements IBannerService {
@Resource
BannerMapper bannerMapper;
/**
* banner
*
* @author LikeAdmin
* @param pageValidate
* @param searchValidate
* @return PageResult<BannerListedVo>
*/
@Override
public PageResult<BannerListedVo> list(PageValidate pageValidate, BannerSearchValidate searchValidate) {
Integer page = pageValidate.getPageNo();
Integer limit = pageValidate.getPageSize();
QueryWrapper<Banner> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
bannerMapper.setSearch(queryWrapper, searchValidate, new String[]{
"like:title:str",
"=:sort:str",
"=:isShow@is_show:int",
"like:linkAddress@link_address:str",
});
IPage<Banner> iPage = bannerMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<BannerListedVo> list = new LinkedList<>();
for(Banner item : iPage.getRecords()) {
BannerListedVo vo = new BannerListedVo();
BeanUtils.copyProperties(item, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(item.getImg()));
vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime()));
vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime()));
list.add(vo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
* banner
*
* @author LikeAdmin
* @param id
* @return Banner
*/
@Override
public BannerDetailVo detail(Integer id) {
Banner model = bannerMapper.selectOne(
new QueryWrapper<Banner>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
BannerDetailVo vo = new BannerDetailVo();
BeanUtils.copyProperties(model, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(model.getImg()));
return vo;
}
/**
* banner
*
* @author LikeAdmin
* @param createValidate
*/
@Override
public void add(BannerCreateValidate createValidate) {
Banner model = new Banner();
model.setTitle(createValidate.getTitle());
model.setCreateTime(System.currentTimeMillis() / 1000);
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(createValidate.getSort());
model.setIsShow(createValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(createValidate.getImg()));
model.setLinkAddress(createValidate.getLinkAddress());
bannerMapper.insert(model);
}
/**
* banner
*
* @author LikeAdmin
* @param updateValidate
*/
@Override
public void edit(BannerUpdateValidate updateValidate) {
Banner model = bannerMapper.selectOne(
new QueryWrapper<Banner>()
.eq("id", updateValidate.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setId(updateValidate.getId());
model.setTitle(updateValidate.getTitle());
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(updateValidate.getSort());
model.setIsShow(updateValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(updateValidate.getImg()));
model.setLinkAddress(updateValidate.getLinkAddress());
bannerMapper.updateById(model);
}
/**
* banner
*
* @author LikeAdmin
* @param id ID
*/
@Override
public void del(Integer id) {
Banner model = bannerMapper.selectOne(
new QueryWrapper<Banner>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setIsDelete(1);
model.setDeleteTime(System.currentTimeMillis() / 1000);
bannerMapper.updateById(model);
}
}

View File

@ -0,0 +1,166 @@
package com.wyh.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.query.MPJQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wyh.admin.service.ICaseService;
import com.wyh.admin.validate.basic.company.CaseCreateValidate;
import com.wyh.admin.validate.basic.company.CaseSearchValidate;
import com.wyh.admin.validate.basic.company.CaseUpdateValidate;
import com.wyh.admin.validate.commons.PageValidate;
import com.wyh.admin.vo.basic.company.CaseDetailVo;
import com.wyh.admin.vo.basic.company.CaseListedVo;
import com.wyh.common.config.GlobalConfig;
import com.wyh.common.core.PageResult;
import com.wyh.common.entity.basic.company.Case;
import com.wyh.common.mapper.basic.company.CaseMapper;
import com.wyh.common.util.ListUtils;
import com.wyh.common.util.TimeUtils;
import com.wyh.common.util.UrlUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.*;
/**
*
* @author wyh
*/
@Service
public class CaseServiceImpl implements ICaseService {
@Resource
CaseMapper caseMapper;
/**
*
*
* @author wyh
* @param pageValidate
* @param searchValidate
* @return PageResult<CaseListedVo>
*/
@Override
public PageResult<CaseListedVo> list(PageValidate pageValidate, CaseSearchValidate searchValidate) {
Integer page = pageValidate.getPageNo();
Integer limit = pageValidate.getPageSize();
QueryWrapper<Case> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
caseMapper.setSearch(queryWrapper, searchValidate, new String[]{
"like:name:int",
"=:isShow@is_show:int",
});
IPage<Case> iPage = caseMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<CaseListedVo> list = new LinkedList<>();
for(Case item : iPage.getRecords()) {
CaseListedVo vo = new CaseListedVo();
BeanUtils.copyProperties(item, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(item.getImg()));
vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime()));
vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime()));
list.add(vo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
*
*
* @author wyh
* @param id
* @return Case
*/
@Override
public CaseDetailVo detail(Integer id) {
Case model = caseMapper.selectOne(
new QueryWrapper<Case>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
CaseDetailVo vo = new CaseDetailVo();
BeanUtils.copyProperties(model, vo);
vo.setImg(UrlUtils.toAbsoluteUrl(model.getImg()));
return vo;
}
/**
*
*
* @author wyh
* @param createValidate
*/
@Override
public void add(CaseCreateValidate createValidate) {
Case model = new Case();
model.setName(createValidate.getName());
model.setCreateTime(System.currentTimeMillis() / 1000);
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(createValidate.getSort());
model.setIsShow(createValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(createValidate.getImg()));
model.setContent(createValidate.getContent());
caseMapper.insert(model);
}
/**
*
*
* @author wyh
* @param updateValidate
*/
@Override
public void edit(CaseUpdateValidate updateValidate) {
Case model = caseMapper.selectOne(
new QueryWrapper<Case>()
.eq("id", updateValidate.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setId(updateValidate.getId());
model.setName(updateValidate.getName());
model.setUpdateTime(System.currentTimeMillis() / 1000);
model.setSort(updateValidate.getSort());
model.setIsShow(updateValidate.getIsShow());
model.setImg(UrlUtils.toRelativeUrl(updateValidate.getImg()));
model.setContent(updateValidate.getContent());
caseMapper.updateById(model);
}
/**
*
*
* @author wyh
* @param id ID
*/
@Override
public void del(Integer id) {
Case model = caseMapper.selectOne(
new QueryWrapper<Case>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setIsDelete(1);
model.setDeleteTime(System.currentTimeMillis() / 1000);
caseMapper.updateById(model);
}
}

View File

@ -4,14 +4,13 @@ import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.query.MPJQueryWrapper;
import com.wyh.admin.service.IGoodsCateService;
import com.wyh.admin.validate.GoodsCateCreateValidate;
import com.wyh.admin.validate.GoodsCateUpdateValidate;
import com.wyh.admin.validate.GoodsCateSearchValidate;
import com.wyh.admin.validate.goods.GoodsCateCreateValidate;
import com.wyh.admin.vo.GoodsCateListedVo;
import com.wyh.admin.vo.GoodsCateDetailVo;
import com.wyh.common.config.GlobalConfig;
import com.wyh.common.entity.GoodsCate;
import com.wyh.common.mapper.GoodsCateMapper;
import com.wyh.admin.vo.goods.GoodsCateDetailVo;
import com.wyh.common.entity.goods.GoodsCate;
import com.wyh.common.mapper.goods.GoodsCateMapper;
import com.wyh.common.util.ListUtils;
import com.wyh.common.util.TimeUtils;
import com.wyh.common.util.UrlUtils;

View File

@ -0,0 +1,35 @@
package com.wyh.admin.validate.basic.banner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
@Data
@ApiModel("banner信息创建参数")
public class BannerCreateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "title参数缺失")
@ApiModelProperty(value = "标题")
private String title;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "banner图")
private String img;
@NotNull(message = "linkAddress参数缺失")
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,26 @@
package com.wyh.admin.validate.basic.banner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("banner信息搜素参数")
public class BannerSearchValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,44 @@
package com.wyh.admin.validate.basic.banner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
import com.wyh.common.validator.annotation.IDMust;
/**
* banner
* @author LikeAdmin
*/
@Data
@ApiModel("banner信息更新参数")
public class BannerUpdateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@IDMust(message = "id参数必传且需大于0")
@ApiModelProperty(value = "主键")
private Integer id;
@NotNull(message = "title参数缺失")
@ApiModelProperty(value = "标题")
private String title;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "banner图")
private String img;
@NotNull(message = "linkAddress参数缺失")
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,35 @@
package com.wyh.admin.validate.basic.bannerfront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
@Data
@ApiModel("小程序banner管理创建参数")
public class BannerFrontCreateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "title参数缺失")
@ApiModelProperty(value = "banner标题")
private String title;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "banner图")
private String img;
@NotNull(message = "linkAddress参数缺失")
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,23 @@
package com.wyh.admin.validate.basic.bannerfront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("小程序banner管理搜素参数")
public class BannerFrontSearchValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "banner标题")
private String title;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,44 @@
package com.wyh.admin.validate.basic.bannerfront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
import com.wyh.common.validator.annotation.IDMust;
/**
* banner
* @author wyh
*/
@Data
@ApiModel("小程序banner管理更新参数")
public class BannerFrontUpdateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@IDMust(message = "id参数必传且需大于0")
@ApiModelProperty(value = "主键")
private Integer id;
@NotNull(message = "title参数缺失")
@ApiModelProperty(value = "banner标题")
private String title;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "banner图")
private String img;
@NotNull(message = "linkAddress参数缺失")
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,33 @@
package com.wyh.admin.validate.basic.company;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
@Data
@ApiModel("成功案例信息创建参数")
public class CaseCreateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull(message = "name参数缺失")
@ApiModelProperty(value = "案例名称")
private String name;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "案例图片")
private String img;
@ApiModelProperty(value = "案例内容")
private String content;
}

View File

@ -0,0 +1,20 @@
package com.wyh.admin.validate.basic.company;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("成功案例信息搜素参数")
public class CaseSearchValidate implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "案例名称")
private String name;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
}

View File

@ -0,0 +1,43 @@
package com.wyh.admin.validate.basic.company;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import javax.validation.constraints.*;
import com.wyh.common.validator.annotation.IDMust;
/**
*
* @author wyh
*/
@Data
@ApiModel("成功案例信息更新参数")
public class CaseUpdateValidate implements Serializable {
private static final long serialVersionUID = 1L;
@IDMust(message = "id参数必传且需大于0")
@ApiModelProperty(value = "主键")
private Integer id;
@NotNull(message = "name参数缺失")
@ApiModelProperty(value = "案例名称")
private String name;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@NotNull(message = "img参数缺失")
@ApiModelProperty(value = "案例图片")
private String img;
@ApiModelProperty(value = "案例内容")
private String content;
}

View File

@ -1,4 +1,4 @@
package com.wyh.admin.validate;
package com.wyh.admin.validate.goods;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -18,14 +18,14 @@ public class GoodsCateCreateValidate implements Serializable {
@NotNull(message = "pid参数缺失")
@ApiModelProperty(value = "上级菜单")
private String pid;
private Integer pid;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private String sort;
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private String isShow;
private Integer isShow;
}

View File

@ -19,7 +19,7 @@ public class GoodsCateUpdateValidate implements Serializable {
@IDMust(message = "id参数必传且需大于0")
@ApiModelProperty(value = "主键")
private String id;
private Integer id;
@NotNull(message = "name参数缺失")
@ApiModelProperty(value = "产品分类名称")
@ -27,14 +27,14 @@ public class GoodsCateUpdateValidate implements Serializable {
@NotNull(message = "pid参数缺失")
@ApiModelProperty(value = "上级菜单")
private String pid;
private Integer pid;
@NotNull(message = "sort参数缺失")
@ApiModelProperty(value = "排序编号")
private String sort;
private Integer sort;
@NotNull(message = "isShow参数缺失")
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private String isShow;
private Integer isShow;
}

View File

@ -0,0 +1,34 @@
package com.wyh.admin.vo.basic.banner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("banner信息详情Vo")
public class BannerDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,40 @@
package com.wyh.admin.vo.basic.banner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("banner信息列表Vo")
public class BannerListedVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "更新时间")
private String updateTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,34 @@
package com.wyh.admin.vo.basic.bannerfront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("小程序banner管理详情Vo")
public class BannerFrontDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "banner标题")
private String title;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,40 @@
package com.wyh.admin.vo.basic.bannerfront;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("小程序banner管理列表Vo")
public class BannerFrontListedVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "banner标题")
private String title;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "更新时间")
private String updateTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,33 @@
package com.wyh.admin.vo.basic.company;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("成功案例信息详情Vo")
public class CaseDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "案例名称")
private String name;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "案例图片")
private String img;
@ApiModelProperty(value = "案例内容")
private String content;
}

View File

@ -0,0 +1,38 @@
package com.wyh.admin.vo.basic.company;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("成功案例信息列表Vo")
public class CaseListedVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "案例名称")
private String name;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ApiModelProperty(value = "更新时间")
private String updateTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "案例图片")
private String img;
@ApiModelProperty(value = "案例内容")
private String content;
}

View File

@ -1,4 +1,4 @@
package com.wyh.admin.vo;
package com.wyh.admin.vo.goods;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -13,19 +13,19 @@ public class GoodsCateDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private String id;
private Integer id;
@ApiModelProperty(value = "产品分类名称")
private String name;
@ApiModelProperty(value = "上级菜单")
private String pid;
private Integer pid;
@ApiModelProperty(value = "排序编号")
private String sort;
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private String isShow;
private Integer isShow;
}

View File

@ -13,13 +13,13 @@ public class GoodsCateListedVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private String id;
private Integer id;
@ApiModelProperty(value = "产品分类名称")
private String name;
@ApiModelProperty(value = "上级菜单")
private String pid;
private Integer pid;
@ApiModelProperty(value = "创建时间")
private String createTime;
@ -28,10 +28,10 @@ public class GoodsCateListedVo implements Serializable {
private String updateTime;
@ApiModelProperty(value = "排序编号")
private String sort;
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private String isShow;
private Integer isShow;
}

View File

@ -0,0 +1,48 @@
package com.wyh.common.entity.basic.banner;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("banner信息实体")
public class Banner implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "是否删除")
private Integer isDelete;
@ApiModelProperty(value = "创建时间")
private Long createTime;
@ApiModelProperty(value = "更新时间")
private Long updateTime;
@ApiModelProperty(value = "删除时间")
private Long deleteTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,48 @@
package com.wyh.common.entity.basic.bannerfront;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("小程序banner管理实体")
public class BannerFront implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "banner标题")
private String title;
@ApiModelProperty(value = "是否删除: 0=否, 1=是")
private Integer isDelete;
@ApiModelProperty(value = "创建时间")
private Long createTime;
@ApiModelProperty(value = "更新时间")
private Long updateTime;
@ApiModelProperty(value = "删除时间")
private Long deleteTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "banner图")
private String img;
@ApiModelProperty(value = "链接地址")
private String linkAddress;
}

View File

@ -0,0 +1,47 @@
package com.wyh.common.entity.basic.company;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("成功案例信息实体")
public class Case implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "案例名称")
private String name;
@ApiModelProperty(value = "是否删除: 0=否, 1=是")
private Integer isDelete;
@ApiModelProperty(value = "创建时间")
private Long createTime;
@ApiModelProperty(value = "更新时间")
private Long updateTime;
@ApiModelProperty(value = "删除时间")
private Long deleteTime;
@ApiModelProperty(value = "排序编号")
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private Integer isShow;
@ApiModelProperty(value = "案例图片")
private String img;
@ApiModelProperty(value = "案例内容")
private String content;
}

View File

@ -1,4 +1,4 @@
package com.wyh.common.entity;
package com.wyh.common.entity.goods;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@ -16,13 +16,13 @@ public class GoodsCate implements Serializable {
@TableId(value="id", type= IdType.AUTO)
@ApiModelProperty(value = "主键")
private String id;
private Integer id;
@ApiModelProperty(value = "产品分类名称")
private String name;
@ApiModelProperty(value = "上级菜单")
private String pid;
private Integer pid;
@ApiModelProperty(value = "是否删除: 0=否, 1=是")
private Integer isDelete;
@ -37,9 +37,9 @@ public class GoodsCate implements Serializable {
private Long deleteTime;
@ApiModelProperty(value = "排序编号")
private String sort;
private Integer sort;
@ApiModelProperty(value = "是否显示: 0=否, 1=是")
private String isShow;
private Integer isShow;
}

View File

@ -0,0 +1,14 @@
package com.wyh.common.mapper.basic.banner;
import com.wyh.common.core.basics.IBaseMapper;
import com.wyh.common.entity.basic.banner.Banner;
import org.apache.ibatis.annotations.Mapper;
/**
* bannerMapper
* @author LikeAdmin
*/
@Mapper
public interface BannerMapper extends IBaseMapper<Banner> {
}

View File

@ -0,0 +1,14 @@
package com.wyh.common.mapper.basic.bannerfront;
import com.wyh.common.core.basics.IBaseMapper;
import com.wyh.common.entity.basic.bannerfront.BannerFront;
import org.apache.ibatis.annotations.Mapper;
/**
* bannerMapper
* @author wyh
*/
@Mapper
public interface BannerFrontMapper extends IBaseMapper<BannerFront> {
}

View File

@ -0,0 +1,14 @@
package com.wyh.common.mapper.basic.company;
import com.wyh.common.core.basics.IBaseMapper;
import com.wyh.common.entity.basic.company.Case;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
* @author wyh
*/
@Mapper
public interface CaseMapper extends IBaseMapper<Case> {
}

View File

@ -1,7 +1,8 @@
package com.wyh.common.mapper;
package com.wyh.common.mapper.goods;
import com.wyh.common.core.basics.IBaseMapper;
import com.wyh.common.entity.GoodsCate;
import com.wyh.common.entity.goods.GoodsCate;
import org.apache.ibatis.annotations.Mapper;
/**

View File

@ -28,6 +28,7 @@ public class SwaggerConfig {
.enable(enabled)
.select()
.apis(RequestHandlerSelectors.basePackage("com.wyh.front"))
.build()
.groupName("中将业务接口【前台】");
}

View File

@ -16,6 +16,7 @@ import com.wyh.front.service.IIndexService;
import com.wyh.front.validate.common.SmsValidate;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -61,7 +62,8 @@ public class IndexController {
@NotLogin
@GetMapping("/policy")
@ApiOperation(value="政策协议")
@ApiOperation(value="政策协议",notes="类型 service=服务协议,privacy=隐私协议")
@ApiParam(name="type",value="类型 service=服务协议,privacy=隐私协议")
public AjaxResult<Map<String, String>> policy(@RequestParam String type) {
Map<String, String> map = iIndexService.policy(type);
return AjaxResult.success(map);

View File

@ -9,6 +9,7 @@
"version": "0.0.0",
"license": "MIT",
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@element-plus/icons-vue": "^2.0.6",
"@highlightjs/vue-plugin": "^2.1.0",
"@wangeditor/editor": "^5.1.12",
@ -58,6 +59,11 @@
"vue-tsc": "^0.38.1"
}
},
"node_modules/@amap/amap-jsapi-loader": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
"integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw=="
},
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz",
@ -7260,6 +7266,11 @@
}
},
"dependencies": {
"@amap/amap-jsapi-loader": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
"integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw=="
},
"@ampproject/remapping": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz",

View File

@ -10,6 +10,7 @@
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@element-plus/icons-vue": "^2.0.6",
"@highlightjs/vue-plugin": "^2.1.0",
"@wangeditor/editor": "^5.1.12",

26
admin/src/api/banner.ts Normal file
View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// banner信息列表
export function bannerLists(params?: Record<string, any>) {
return request.get({ url: '/banner/list', params })
}
// banner信息详情
export function bannerDetail(params: Record<string, any>) {
return request.get({ url: '/banner/detail', params })
}
// banner信息新增
export function bannerAdd(params: Record<string, any>) {
return request.post({ url: '/banner/add', params })
}
// banner信息编辑
export function bannerEdit(params: Record<string, any>) {
return request.post({ url: '/banner/edit', params })
}
// banner信息删除
export function bannerDelete(params: Record<string, any>) {
return request.post({ url: '/banner/del', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 小程序banner管理列表
export function bannerfrontLists(params?: Record<string, any>) {
return request.get({ url: '/bannerfront/list', params })
}
// 小程序banner管理详情
export function bannerfrontDetail(params: Record<string, any>) {
return request.get({ url: '/bannerfront/detail', params })
}
// 小程序banner管理新增
export function bannerfrontAdd(params: Record<string, any>) {
return request.post({ url: '/bannerfront/add', params })
}
// 小程序banner管理编辑
export function bannerfrontEdit(params: Record<string, any>) {
return request.post({ url: '/bannerfront/edit', params })
}
// 小程序banner管理删除
export function bannerfrontDelete(params: Record<string, any>) {
return request.post({ url: '/bannerfront/del', params })
}

26
admin/src/api/case.ts Normal file
View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 成功案例信息列表
export function caseLists(params?: Record<string, any>) {
return request.get({ url: '/case/list', params })
}
// 成功案例信息详情
export function caseDetail(params: Record<string, any>) {
return request.get({ url: '/case/detail', params })
}
// 成功案例信息新增
export function caseAdd(params: Record<string, any>) {
return request.post({ url: '/case/add', params })
}
// 成功案例信息编辑
export function caseEdit(params: Record<string, any>) {
return request.post({ url: '/case/edit', params })
}
// 成功案例信息删除
export function caseDelete(params: Record<string, any>) {
return request.post({ url: '/case/del', params })
}

View File

@ -207,8 +207,6 @@
</div>
</file-item>
</del-wrap>
<overflow-tooltip class="mt-1" :content="item.name" />
<overflow-tooltip class="mt-2" :content="item.name" />
<div class="operation-btns flex items-center">

View File

@ -0,0 +1,154 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
:clickModalClose="true"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<el-form-item label="标题" prop="title">
<el-input v-model="formData.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="是否显示" prop="isShow">
<el-radio-group class="flex-1" v-model="formData.isShow" placeholder="请选择是否显示">
<el-radio :label="1">显示</el-radio>
<el-radio :label="0">不显示</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="banner图" prop="img">
<material-picker size="100px" v-model="formData.img" type="video" />
</el-form-item>
<el-form-item label="排序" prop="menuSort">
<div>
<el-input-number v-model="formData.sort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
<el-form-item label="链接地址" prop="linkAddress">
<el-input v-model="formData.linkAddress" placeholder="请输入链接地址" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup>
import type { FormInstance } from 'element-plus'
import { bannerEdit, bannerAdd, bannerDetail } from '@/api/banner'
import Popup from '@/components/popup/index.vue'
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑banner信息' : '新增banner信息'
})
const formData = reactive({
id: null,
title: '',
sort: 0,
isShow: 0,
img: '',
linkAddress: '',
})
const formRules = {
id: [
{
required: true,
message: '请输入主键',
trigger: ['blur']
}
],
title: [
{
required: true,
message: '请输入标题',
trigger: ['blur']
}
],
sort: [
{
required: true,
message: '请输入排序编号',
trigger: ['blur']
}
],
isShow: [
{
required: true,
message: '请选择是否显示',
trigger: ['blur']
}
],
img: [
{
required: true,
message: '请选择banner图',
trigger: ['blur']
}
],
linkAddress: [
{
required: true,
message: '请输入链接地址',
trigger: ['blur']
}
],
}
const handleSubmit = async () => {
await formRef.value?.validate()
const data: any = { ...formData }
console.log(data)
mode.value == 'edit' ? await bannerEdit(data) : await bannerAdd(data)
popupRef.value?.close()
feedback.msgSuccess('操作成功')
emit('success')
}
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
const setFormData = async (data: Record<string, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await bannerDetail({
id: row.id
})
setFormData(data)
}
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,160 @@
<template>
<div class="index-lists">
<el-card class="!border-none" shadow="never">
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="标题" prop="title">
<el-input class="w-[280px]" v-model="queryParams.title" />
</el-form-item>
<el-form-item label="是否显示" prop="isShow">
<el-select
v-model="queryParams.isShow"
class="w-[280px]"
clearable
>
<el-option label="全部" value="" />
<el-option
v-for="(item, index) in dictData.Integer"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="链接地址" prop="linkAddress">
<el-input class="w-[280px]" v-model="queryParams.linkAddress" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage"></el-button>
<el-button @click="resetParams"></el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['banner:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table
class="mt-4"
size="large"
v-loading="pager.loading"
:data="pager.lists"
>
<el-table-column label="标题" prop="title" min-width="100" show-overflow-tooltip >
<template #default="{ row }">
<el-link @click.stop="handlePreview(row.img)" :underline="false">
{{ row.title }}
</el-link>
</template>
</el-table-column>
<el-table-column label="banner图" prop="img" min-width="100">
<template #default="{ row }">
<file-item :uri="row.img" file-size="80px" type="video"></file-item>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" min-width="100" />
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
<el-table-column label="排序编号" prop="sort" min-width="100" />
<el-table-column label="是否显示" prop="isShow" min-width="100">
<template #default="{ row }">
<dict-value :options="dictData.Integer" :value="row.isShow" />
</template>
</el-table-column>
<el-table-column label="链接地址" prop="linkAddress" min-width="100" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['banner:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['banner:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
<preview v-model="showPreview" :url="previewUrl" type="video" />
</div>
</template>
<script lang="ts" setup name="banner">
import { bannerDelete, bannerLists } from '@/api/banner'
import { useDictData } from '@/hooks/useDictOptions'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import Preview from '@/components/material/preview.vue'
import FileItem from "@/components/material/file.vue";
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const queryParams = reactive({
title: '',
sort: null,
isShow: null,
linkAddress: '',
})
const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: bannerLists,
params: queryParams
})
const previewUrl = ref('')
const showPreview = ref(false)
const { dictData } = useDictData<{
Integer: any[]
}>(['Integer'])
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await bannerDelete({ id })
feedback.msgSuccess('删除成功')
getLists()
}
const handlePreview = (img: string) => {
previewUrl.value = img
console.log(img)
showPreview.value = true
}
getLists()
</script>

View File

@ -0,0 +1,153 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
:clickModalClose="true"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="110px" :rules="formRules">
<el-form-item label="banner标题" prop="title">
<el-input v-model="formData.title" placeholder="请输入banner标题" />
</el-form-item>
<el-form-item label="banner图" prop="img">
<material-picker size="100px" v-model="formData.img" />
</el-form-item>
<el-form-item label="是否显示" prop="isShow">
<el-radio-group class="flex-1" v-model="formData.isShow" placeholder="请选择是否显示">
<el-radio :label="1">显示</el-radio>
<el-radio :label="0">不显示</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
<el-form-item label="链接地址" prop="linkAddress">
<el-input v-model="formData.linkAddress" placeholder="请输入链接地址" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup>
import type { FormInstance } from 'element-plus'
import { bannerfrontEdit, bannerfrontAdd, bannerfrontDetail } from '@/api/bannerfront'
import Popup from '@/components/popup/index.vue'
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑小程序banner管理' : '新增小程序banner管理'
})
const formData = reactive({
id: '',
title: '',
sort: '',
isShow: '',
img: '',
linkAddress: '',
})
const formRules = {
id: [
{
required: true,
message: '请输入主键',
trigger: ['blur']
}
],
title: [
{
required: true,
message: '请输入banner标题',
trigger: ['blur']
}
],
sort: [
{
required: true,
message: '请输入排序编号',
trigger: ['blur']
}
],
isShow: [
{
required: true,
message: '请选择是否显示: 0=否, 1=是',
trigger: ['blur']
}
],
img: [
{
required: true,
message: '请输入banner图',
trigger: ['blur']
}
],
linkAddress: [
{
required: true,
message: '请输入链接地址',
trigger: ['blur']
}
],
}
const handleSubmit = async () => {
await formRef.value?.validate()
const data: any = { ...formData }
mode.value == 'edit' ? await bannerfrontEdit(data) : await bannerfrontAdd(data)
popupRef.value?.close()
feedback.msgSuccess('操作成功')
emit('success')
}
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
const setFormData = async (data: Record<string, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await bannerfrontDetail({
id: row.id
})
setFormData(data)
}
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,150 @@
<template>
<div class="index-lists">
<el-card class="!border-none" shadow="never">
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="banner标题" prop="title">
<el-input class="w-[280px]" v-model="queryParams.title" />
</el-form-item>
<el-form-item label="是否显示" prop="isShow">
<el-select
v-model="queryParams.isShow"
class="w-[280px]"
clearable
>
<el-option label="全部" value="" />
<el-option
v-for="(item, index) in dictData.Integer"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="链接地址" prop="linkAddress">
<el-input class="w-[280px]" v-model="queryParams.linkAddress" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage"></el-button>
<el-button @click="resetParams"></el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['bannerfront:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table
class="mt-4"
size="large"
v-loading="pager.loading"
:data="pager.lists"
>
<el-table-column label="banner标题" prop="title" min-width="100" />
<el-table-column label="banner图" prop="img" min-width="100">
<template #default="{ row }">
<image-contain
:width="100"
:height="60"
:src="row.img"
:preview-src-list="[row.img]"
preview-teleported
hide-on-click-modal
/>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" min-width="100" />
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
<el-table-column label="排序编号" prop="sort" min-width="100" />
<el-table-column label="是否显示" prop="isShow" min-width="100">
<template #default="{ row }">
<dict-value :options="dictData.Integer" :value="row.isShow" />
</template>
</el-table-column>
<el-table-column label="链接地址" prop="linkAddress" min-width="100" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['bannerfront:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['bannerfront:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
:dict-data="dictData"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="bannerfront">
import { bannerfrontDelete, bannerfrontLists } from '@/api/bannerfront'
import { useDictData } from '@/hooks/useDictOptions'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import FileItem from "@/components/material/file.vue";
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const queryParams = reactive({
title: '',
isShow: '',
linkAddress: '',
})
const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: bannerfrontLists,
params: queryParams
})
const { dictData } = useDictData<{
Integer: any[]
}>(['Integer'])
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await bannerfrontDelete({ id })
feedback.msgSuccess('删除成功')
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,146 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="1000px"
:clickModalClose="true"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<el-form-item label="案例名称" prop="name" style="width: 550px">
<el-input v-model="formData.name" placeholder="请输入案例名称" />
</el-form-item>
<el-form-item label="案例图片" prop="img">
<material-picker size="300px" v-model="formData.img" />
</el-form-item>
<el-form-item label="是否显示" prop="isShow">
<el-radio-group class="flex-1" v-model="formData.isShow" placeholder="请选择是否显示">
<el-radio :label="1">显示</el-radio>
<el-radio :label="0">不显示</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
<el-form-item label="内容" prop="content">
<editor v-model="formData.content" :height="500" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup>
import type { FormInstance } from 'element-plus'
import { caseEdit, caseAdd, caseDetail } from '@/api/case'
import Popup from '@/components/popup/index.vue'
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑成功案例信息' : '新增成功案例信息'
})
const formData = reactive({
id: '',
name: '',
sort: '',
isShow: '',
img: '',
content: '',
})
const formRules = {
id: [
{
required: true,
message: '请输入主键',
trigger: ['blur']
}
],
name: [
{
required: true,
message: '请输入案例名称',
trigger: ['blur']
}
],
sort: [
{
required: true,
message: '请输入排序编号',
trigger: ['blur']
}
],
isShow: [
{
required: true,
message: '请输入是否显示: 0=否, 1=是',
trigger: ['blur']
}
],
img: [
{
required: true,
message: '请选择案例图片',
trigger: ['blur']
}
],
}
const handleSubmit = async () => {
await formRef.value?.validate()
const data: any = { ...formData }
mode.value == 'edit' ? await caseEdit(data) : await caseAdd(data)
popupRef.value?.close()
feedback.msgSuccess('操作成功')
emit('success')
}
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
const setFormData = async (data: Record<string, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await caseDetail({
id: row.id
})
setFormData(data)
}
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,129 @@
<template>
<div class="index-lists">
<el-card class="!border-none" shadow="never">
<el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
<el-form-item label="案例名称" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage"></el-button>
<el-button @click="resetParams"></el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['case:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table
class="mt-4"
size="large"
v-loading="pager.loading"
:data="pager.lists"
>
<el-table-column label="案例名称" prop="name" min-width="100" />
<el-table-column label="案例图片" prop="img" min-width="100">
<template #default="{ row }">
<image-contain
:width="100"
:height="60"
:src="row.img"
:preview-src-list="[row.img]"
preview-teleported
hide-on-click-modal
/>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" min-width="100" />
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
<el-table-column label="排序编号" prop="sort" min-width="100" />
<el-table-column label="是否显示" prop="isShow" min-width="100">
<template #default="{ row }">
<dict-value :options="dictData.Integer" :value="row.isShow" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['case:edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['case:del']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
@success="getLists"
@close="showEdit = false"
/>
</div>
</template>
<script lang="ts" setup name="case">
import { caseDelete, caseLists } from '@/api/case'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import {useDictData} from "@/hooks/useDictOptions";
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const queryParams = reactive({
name: '',
isShow: '',
})
const { dictData } = useDictData<{
Integer: any[]
}>(['Integer'])
const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: caseLists,
params: queryParams
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.getDetail(data)
}
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await caseDelete({ id })
feedback.msgSuccess('删除成功')
getLists()
}
getLists()
</script>

View File

@ -27,22 +27,16 @@
<el-form-item label="产品分类名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入产品分类名称" />
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<el-form-item label="排序" prop="menuSort">
<div>
<el-input-number v-model="formData.sort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
<el-form-item label="是否显示" prop="status">
<el-form-item label="是否显示" prop="isShow">
<el-radio-group v-model="formData.isShow" placeholder="请选择是否显示">
<el-radio
v-for="(item, index) in dictData.Boolean"
:key="index"
:label="item.value"
:disabled="!item.status"
>
{{ item.name }}
</el-radio>
<el-radio :label="1">显示</el-radio>
<el-radio :label="0">不显示</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
@ -73,8 +67,8 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
name: '',
pid: '',
sort: '',
pid: 0,
sort: 0,
isShow: '',
})

View File

@ -13,7 +13,7 @@
>
<el-option label="全部" value="" />
<el-option
v-for="(item, index) in dictData.Boolean"
v-for="(item, index) in dictData.Integer"
:key="index"
:label="item.name"
:value="item.value"
@ -53,7 +53,7 @@
<el-table-column label="是否显示" prop="isShow" min-width="100">
<template #default="{ row }">
<dict-value :options="dictData.Boolean" :value="row.isShow" />
<dict-value :options="dictData.Integer" :value="row.isShow" />
</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
@ -112,15 +112,15 @@ const lists = ref<any[]>([])
const queryParams = reactive({
name: '',
pid: '',
sort: '',
isShow: '',
pid: null,
sort: null,
isShow: null,
})
const { dictData } = useDictData<{
Boolean: any[]
}>(['Boolean'])
Integer: any[]
}>(['Integer'])
const getLists = async () => {
loading.value = true

View File

@ -2,6 +2,11 @@
# yarn lockfile v1
"@amap/amap-jsapi-loader@^1.0.1":
version "1.0.1"
resolved "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz"
integrity sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==
"@ampproject/remapping@^2.1.0":
version "2.2.0"
resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz"