parent
134ace1ffb
commit
2add6dfc3b
|
|
@ -65,4 +65,28 @@ public class CrontabController {
|
|||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
double lat1 = 39.927508;
|
||||
double lon1 = 116.333379;
|
||||
double lat2 = 39.928185;
|
||||
double lon2 = 116.334016;
|
||||
|
||||
double r = 6371; // Earth's radius in km
|
||||
|
||||
double distance = calculateDistance(lat1, lon1, lat2, lon2, r);
|
||||
|
||||
System.out.println("The distance between the two points is: " + distance + " km");
|
||||
}
|
||||
|
||||
public static double calculateDistance(double lat1, double lon1, double lat2, double lon2, double r) {
|
||||
double dLat = Math.toRadians(lat2 - lat1);
|
||||
double dLon = Math.toRadians(lon2 - lon1);
|
||||
|
||||
double a = Math.pow(Math.sin(dLat/2), 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.pow(Math.sin(dLon/2), 2);
|
||||
double c = 2 * Math.asin(Math.sqrt(a));
|
||||
|
||||
return r * c;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
package com.wyh.admin.controller;
|
||||
|
||||
import com.wyh.admin.aop.Log;
|
||||
import com.wyh.admin.service.IExperimentService;
|
||||
import com.wyh.admin.validate.commons.IdValidate;
|
||||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.common.core.AjaxResult;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.validator.ExperimentCreateValidate;
|
||||
import com.wyh.common.validator.ExperimentSearchValidate;
|
||||
import com.wyh.common.validator.ExperimentUpdateValidate;
|
||||
import com.wyh.common.validator.annotation.IDMust;
|
||||
import com.wyh.common.vo.ExperimentDetailVo;
|
||||
import com.wyh.common.vo.ExperimentListedVo;
|
||||
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/experiment")
|
||||
@Api(tags = "实验信息管理")
|
||||
public class ExperimentController {
|
||||
|
||||
@Resource
|
||||
IExperimentService iExperimentService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation(value="实验信息列表")
|
||||
public AjaxResult<PageResult<ExperimentListedVo>> list(@Validated PageValidate pageValidate,
|
||||
@Validated ExperimentSearchValidate searchValidate) {
|
||||
PageResult<ExperimentListedVo> list = iExperimentService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="实验信息详情")
|
||||
public AjaxResult<ExperimentDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
ExperimentDetailVo detail = iExperimentService.detail(id);
|
||||
return AjaxResult.success(detail);
|
||||
}
|
||||
|
||||
@Log(title = "实验信息新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="实验信息新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody ExperimentCreateValidate createValidate) {
|
||||
iExperimentService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "实验信息编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="实验信息编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody ExperimentUpdateValidate updateValidate) {
|
||||
iExperimentService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "实验信息删除")
|
||||
@PostMapping("/del")
|
||||
@ApiOperation(value="实验信息删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iExperimentService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ import com.wyh.admin.validate.commons.IdValidate;
|
|||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.common.core.AjaxResult;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.entity.goods.Goods;
|
||||
import com.wyh.common.validator.annotation.IDMust;
|
||||
import com.wyh.common.validator.goods.GoodsCreateValidate;
|
||||
import com.wyh.common.validator.goods.GoodsSearchValidate;
|
||||
|
|
@ -18,6 +19,7 @@ import org.springframework.validation.annotation.Validated;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("api/goods")
|
||||
|
|
@ -35,6 +37,12 @@ public class GoodsController {
|
|||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="产品信息列表")
|
||||
public AjaxResult<List<Goods>> all () {
|
||||
return AjaxResult.success(iGoodsService.all());
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="产品信息详情")
|
||||
public AjaxResult<GoodsDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
package com.wyh.admin.service;
|
||||
|
||||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.validator.ExperimentCreateValidate;
|
||||
import com.wyh.common.validator.ExperimentSearchValidate;
|
||||
import com.wyh.common.validator.ExperimentUpdateValidate;
|
||||
import com.wyh.common.vo.ExperimentDetailVo;
|
||||
import com.wyh.common.vo.ExperimentListedVo;
|
||||
|
||||
/**
|
||||
* 实验信息服务接口类
|
||||
* @author wyh
|
||||
*/
|
||||
public interface IExperimentService {
|
||||
|
||||
/**
|
||||
* 实验信息列表
|
||||
*
|
||||
* @author wyh
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<ExperimentListedVo>
|
||||
*/
|
||||
PageResult<ExperimentListedVo> list(PageValidate pageValidate, ExperimentSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 实验信息详情
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
* @return ExperimentDetailVo
|
||||
*/
|
||||
ExperimentDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 实验信息新增
|
||||
*
|
||||
* @author wyh
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(ExperimentCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 实验信息编辑
|
||||
*
|
||||
* @author wyh
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(ExperimentUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 实验信息删除
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -2,12 +2,15 @@ package com.wyh.admin.service;
|
|||
|
||||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.entity.goods.Goods;
|
||||
import com.wyh.common.validator.goods.GoodsCreateValidate;
|
||||
import com.wyh.common.validator.goods.GoodsSearchValidate;
|
||||
import com.wyh.common.validator.goods.GoodsUpdateValidate;
|
||||
import com.wyh.common.vo.goods.GoodsDetailVo;
|
||||
import com.wyh.common.vo.goods.GoodsListedVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 产品信息服务接口类
|
||||
|
|
@ -58,4 +61,5 @@ public interface IGoodsService {
|
|||
*/
|
||||
void del(Integer id);
|
||||
|
||||
List<Goods> all();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,180 @@
|
|||
package com.wyh.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wyh.admin.service.IExperimentService;
|
||||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.entity.Experiment;
|
||||
import com.wyh.common.entity.info.ClassInfo;
|
||||
import com.wyh.common.mapper.ExperimentMapper;
|
||||
import com.wyh.common.mapper.info.ClassInfoMapper;
|
||||
import com.wyh.common.util.TimeUtils;
|
||||
import com.wyh.common.validator.ExperimentCreateValidate;
|
||||
import com.wyh.common.validator.ExperimentSearchValidate;
|
||||
import com.wyh.common.validator.ExperimentUpdateValidate;
|
||||
import com.wyh.common.vo.ExperimentDetailVo;
|
||||
import com.wyh.common.vo.ExperimentListedVo;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 实验信息实现类
|
||||
* @author wyh
|
||||
*/
|
||||
@Service
|
||||
public class ExperimentServiceImpl implements IExperimentService {
|
||||
|
||||
@Resource
|
||||
ExperimentMapper experimentMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
ClassInfoMapper classInfoMapper;
|
||||
/**
|
||||
* 实验信息列表
|
||||
*
|
||||
* @author wyh
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<ExperimentListedVo>
|
||||
*/
|
||||
@Override
|
||||
public PageResult<ExperimentListedVo> list(PageValidate pageValidate, ExperimentSearchValidate searchValidate) {
|
||||
Integer page = pageValidate.getPageNo();
|
||||
Integer limit = pageValidate.getPageSize();
|
||||
|
||||
QueryWrapper<Experiment> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("is_delete", 0);
|
||||
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
|
||||
|
||||
experimentMapper.setSearch(queryWrapper, searchValidate, new String[]{
|
||||
"like:title:str",
|
||||
"=:experimentImg@experiment_img:str",
|
||||
"=:experimentVideo@experiment_video:str",
|
||||
"=:sort:int",
|
||||
"=:isShow@is_show:int",
|
||||
"=:classId@class_id:int",
|
||||
"=:content:str",
|
||||
});
|
||||
|
||||
IPage<Experiment> iPage = experimentMapper.selectPage(new Page<>(page, limit), queryWrapper);
|
||||
|
||||
List<ExperimentListedVo> list = new LinkedList<>();
|
||||
for(Experiment item : iPage.getRecords()) {
|
||||
ExperimentListedVo vo = new ExperimentListedVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime()));
|
||||
vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime()));
|
||||
if (item.getClassId()!=null) {
|
||||
ClassInfo classInfo = classInfoMapper.selectById(item.getClassId());
|
||||
if (classInfo!=null) {
|
||||
vo.setClassName(classInfo.getName());
|
||||
}
|
||||
}
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息详情
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键参数
|
||||
* @return Experiment
|
||||
*/
|
||||
@Override
|
||||
public ExperimentDetailVo detail(Integer id) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在");
|
||||
|
||||
ExperimentDetailVo vo = new ExperimentDetailVo();
|
||||
BeanUtils.copyProperties(model, vo);
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息新增
|
||||
*
|
||||
* @author wyh
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(ExperimentCreateValidate createValidate) {
|
||||
Experiment model = new Experiment();
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setTitle(createValidate.getTitle());
|
||||
model.setExperimentImg(createValidate.getExperimentImg());
|
||||
model.setExperimentVideo(createValidate.getExperimentVideo());
|
||||
model.setSort(createValidate.getSort());
|
||||
model.setIsShow(createValidate.getIsShow());
|
||||
model.setClassId(createValidate.getClassId());
|
||||
model.setContent(createValidate.getContent());
|
||||
experimentMapper.insert(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息编辑
|
||||
*
|
||||
* @author wyh
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void edit(ExperimentUpdateValidate updateValidate) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", updateValidate.getId())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setId(updateValidate.getId());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setTitle(updateValidate.getTitle());
|
||||
model.setExperimentImg(updateValidate.getExperimentImg());
|
||||
model.setExperimentVideo(updateValidate.getExperimentVideo());
|
||||
model.setSort(updateValidate.getSort());
|
||||
model.setIsShow(updateValidate.getIsShow());
|
||||
model.setClassId(updateValidate.getClassId());
|
||||
model.setContent(updateValidate.getContent());
|
||||
experimentMapper.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息删除
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setIsDelete(1);
|
||||
model.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
experimentMapper.updateById(model);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -29,6 +29,7 @@ import org.springframework.util.Assert;
|
|||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品信息实现类
|
||||
|
|
@ -212,6 +213,10 @@ public class GoodsServiceImpl implements IGoodsService {
|
|||
goodsMapper.updateById(model);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Goods> all() {
|
||||
return goodsMapper.selectList(Wrappers.<Goods>lambdaQuery().eq(Goods::getIsDelete, 0).orderByDesc(Goods::getSort));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,14 @@
|
|||
|
||||
<!-- 依赖管理 -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.stuxuhai</groupId>
|
||||
<artifactId>jpinyin</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.belerweb</groupId>
|
||||
<artifactId>pinyin4j</artifactId>
|
||||
</dependency>
|
||||
<!-- Autoconfigure -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class GlobalConfig {
|
|||
public static Integer uploadImageSize = 1024 * 1024 * 10;
|
||||
|
||||
// 上传视频限制
|
||||
public static Integer uploadVideoSize = 1024 * 1024 * 30;
|
||||
public static Integer uploadVideoSize = 1024 * 1024 * 100;
|
||||
|
||||
// 上传图片扩展
|
||||
public static String[] uploadImageExt = new String[] {"png", "jpg", "jpeg", "gif", "ico", "bmp"};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
package com.wyh.common.entity;
|
||||
|
||||
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 Experiment implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@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 String title;
|
||||
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@ApiModelProperty(value = "实验内容")
|
||||
private String content;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.wyh.common.entity;
|
||||
|
||||
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 Feedback implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@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 String content;
|
||||
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.wyh.common.mapper;
|
||||
|
||||
import com.wyh.common.core.basics.IBaseMapper;
|
||||
import com.wyh.common.entity.Experiment;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 实验信息Mapper
|
||||
* @author wyh
|
||||
*/
|
||||
@Mapper
|
||||
public interface ExperimentMapper extends IBaseMapper<Experiment> {
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.wyh.common.mapper;
|
||||
|
||||
import com.wyh.common.core.basics.IBaseMapper;
|
||||
import com.wyh.common.entity.Feedback;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 反馈意见信息Mapper
|
||||
* @author LikeAdmin
|
||||
*/
|
||||
@Mapper
|
||||
public interface FeedbackMapper extends IBaseMapper<Feedback> {
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
package com.wyh.common.util;
|
||||
|
||||
import com.github.stuxuhai.jpinyin.PinyinException;
|
||||
import com.github.stuxuhai.jpinyin.PinyinFormat;
|
||||
import com.github.stuxuhai.jpinyin.PinyinHelper;
|
||||
|
||||
import java.text.Collator;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author lgx
|
||||
* @Time 2023/4/17
|
||||
*/
|
||||
public class ChangeChinesePinyinUtil {
|
||||
|
||||
/**
|
||||
* 获取姓名全拼和首字母
|
||||
* PinyinFormat:WITH_TONE_MARK(声调模式),WITH_TONE_NUMBER(数字代表声调模式),WITHOUT_TONE(无声调模式)
|
||||
* @param chinese 汉语名称
|
||||
* @return fullPinyin : 全拼 simplePinyin : 首字母 groupPinyin:微信用户组第一个字母
|
||||
* @throws PinyinException
|
||||
*/
|
||||
public static Map<String, String> changeChinesePinyin(String chinese) throws PinyinException {
|
||||
Map<String, String> pinyin = new HashMap<String, String>();
|
||||
|
||||
//将中文转化成拼音(全拼)
|
||||
String fullPinyin = PinyinHelper.convertToPinyinString(chinese,"", PinyinFormat.WITHOUT_TONE);
|
||||
//将中文转化为简拼模式(各汉字第一个字母组成)
|
||||
String simplePinyin = PinyinHelper.getShortPinyin(chinese);
|
||||
//首字母
|
||||
String firstPinyin = String.valueOf(simplePinyin.charAt(0));
|
||||
|
||||
//判断是否多音字
|
||||
// System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true
|
||||
|
||||
pinyin.put("fullPinyin", fullPinyin);
|
||||
pinyin.put("simplePinyin", simplePinyin.toUpperCase());
|
||||
pinyin.put("groupPinyin", firstPinyin.toUpperCase());
|
||||
return pinyin;
|
||||
}
|
||||
/**
|
||||
* 按拼音首字母分组
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
public static Map<String, List<String>> getCodeGroup(List<String> list) throws PinyinException{
|
||||
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
|
||||
//按字母排序
|
||||
Collections.sort(list, com);
|
||||
//输出26个字母
|
||||
Map<String, List<String>> map = new TreeMap<String, List<String>>();
|
||||
for(int i=1;i<=26;i++){
|
||||
String word = String. valueOf((char) (96 + i)). toUpperCase();
|
||||
//循环找出首字母一样的数据
|
||||
List<String> letter = new ArrayList<String>();
|
||||
for (String str : list) {
|
||||
String code = changeChinesePinyin(str).get("groupPinyin");
|
||||
if(word.equals(code)) {
|
||||
letter.add(str);
|
||||
}
|
||||
}
|
||||
map.put(word, letter);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.wyh.common.util;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sourceforge.pinyin4j.PinyinHelper;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
||||
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
||||
|
||||
@Slf4j
|
||||
public class PinYinUtils {
|
||||
|
||||
/**
|
||||
* 获取第一个汉字首字母
|
||||
*
|
||||
* @author liu
|
||||
*/
|
||||
public static String getFirst(String str) {
|
||||
if(StringUtils.isEmpty(str)){
|
||||
return null;
|
||||
}
|
||||
char[] charArray = str.toCharArray();
|
||||
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
||||
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);//设置拼音大小写
|
||||
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);//设置声调格式
|
||||
try {
|
||||
StringBuffer sb=new StringBuffer();
|
||||
for (char c:charArray){
|
||||
if(!Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
|
||||
continue;
|
||||
}
|
||||
String[] hanyuPinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat);
|
||||
if(hanyuPinyinStringArray==null){
|
||||
continue;
|
||||
}
|
||||
sb.append(hanyuPinyinStringArray[0].charAt(0));
|
||||
}
|
||||
return sb.toString();
|
||||
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
|
||||
log.error("拼音转换失败{}",badHanyuPinyinOutputFormatCombination);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("实验信息创建参数")
|
||||
public class ExperimentCreateValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@NotNull(message = "title参数缺失")
|
||||
@ApiModelProperty(value = "实验标题")
|
||||
private String title;
|
||||
|
||||
@NotNull(message = "experimentImg参数缺失")
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@NotNull(message = "experimentVideo参数缺失")
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@NotNull(message = "sort参数缺失")
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@NotNull(message = "isShow参数缺失")
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@NotNull(message = "classId参数缺失")
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@NotNull(message = "content参数缺失")
|
||||
@ApiModelProperty(value = "实验内容")
|
||||
private String content;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("实验信息搜素参数")
|
||||
public class ExperimentSearchValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "实验标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@ApiModelProperty(value = "实验内容")
|
||||
private String content;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import com.wyh.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 实验信息参数
|
||||
* @author wyh
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("实验信息更新参数")
|
||||
public class ExperimentUpdateValidate 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 = "experimentImg参数缺失")
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@NotNull(message = "experimentVideo参数缺失")
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@NotNull(message = "sort参数缺失")
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@NotNull(message = "isShow参数缺失")
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@NotNull(message = "classId参数缺失")
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@NotNull(message = "content参数缺失")
|
||||
@ApiModelProperty(value = "实验内容")
|
||||
private String content;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("反馈意见信息创建参数")
|
||||
public class FeedbackCreateValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@NotNull(message = "content参数缺失")
|
||||
@ApiModelProperty(value = "反馈内容")
|
||||
private String content;
|
||||
|
||||
@NotNull(message = "image参数缺失")
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@NotNull(message = "userId参数缺失")
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("反馈意见信息搜素参数")
|
||||
public class FeedbackSearchValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "反馈内容")
|
||||
private String content;
|
||||
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.wyh.common.validator;
|
||||
|
||||
import com.wyh.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 反馈意见信息参数
|
||||
* @author LikeAdmin
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("反馈意见信息更新参数")
|
||||
public class FeedbackUpdateValidate implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@IDMust(message = "id参数必传且需大于0")
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@NotNull(message = "content参数缺失")
|
||||
@ApiModelProperty(value = "反馈内容")
|
||||
private String content;
|
||||
|
||||
@NotNull(message = "image参数缺失")
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@NotNull(message = "userId参数缺失")
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class AreaVo {
|
||||
|
||||
private String index;
|
||||
private List<AreaVo> name;
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("实验信息详情Vo")
|
||||
public class ExperimentDetailVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "实验标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@ApiModelProperty(value = "实验内容")
|
||||
private String content;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("实验信息列表Vo")
|
||||
public class ExperimentListedVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private String updateTime;
|
||||
|
||||
@ApiModelProperty(value = "实验标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "实验主图")
|
||||
private String experimentImg;
|
||||
|
||||
@ApiModelProperty(value = "实验视频")
|
||||
private String experimentVideo;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "是否展示")
|
||||
private Integer isShow;
|
||||
|
||||
@ApiModelProperty(value = "分类id")
|
||||
private Integer classId;
|
||||
|
||||
@ApiModelProperty(value = "分类名称")
|
||||
private String className;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("反馈意见信息详情Vo")
|
||||
public class FeedbackDetailVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "反馈内容")
|
||||
private String content;
|
||||
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ApiModel("反馈意见信息列表Vo")
|
||||
public class FeedbackListedVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "主键")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private String createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private String updateTime;
|
||||
|
||||
@ApiModelProperty(value = "图片")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ResponseDataVo {
|
||||
|
||||
|
||||
private String code;
|
||||
private String adcode;
|
||||
private String name;
|
||||
private String center;
|
||||
private String level;
|
||||
private List<ResponseDataVo> districts;
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class WxCityForClientVO {
|
||||
private String id;
|
||||
private String name;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.wyh.common.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description TODO 小程序首页城市下拉显示层
|
||||
* @Author lgx
|
||||
* @Time 2023/3/27
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class WxMainCitysForClientVO {
|
||||
|
||||
/**
|
||||
* 首字母
|
||||
*/
|
||||
private String index;
|
||||
/**
|
||||
* 城市集合
|
||||
*/
|
||||
private List<String> data;
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.wyh.front.controller;
|
||||
|
||||
import com.github.stuxuhai.jpinyin.PinyinException;
|
||||
import com.google.gson.Gson;
|
||||
import com.wyh.common.aop.NotLogin;
|
||||
import com.wyh.common.util.ChangeChinesePinyinUtil;
|
||||
import com.wyh.common.util.HttpUtils;
|
||||
import com.wyh.common.vo.ResponseDataVo;
|
||||
import com.wyh.common.vo.WxCityForClientVO;
|
||||
import com.wyh.common.vo.WxMainCitysForClientVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@Api(tags = "城市分类(首字母)")
|
||||
@RequestMapping("front/cpsp")
|
||||
public class CpspController {
|
||||
|
||||
|
||||
@NotLogin
|
||||
@GetMapping("/getCity")
|
||||
public Map<String,List<WxMainCitysForClientVO>> getCity(){
|
||||
String url="https://restapi.amap.com/v3/config/district";
|
||||
|
||||
String s = HttpUtils.sendPost(url, "key=6921542276811edc857184b87bf4fb0e&subdistrict=2");
|
||||
ResponseDataVo jsonObject = new Gson().fromJson(s, ResponseDataVo.class);
|
||||
List<ResponseDataVo> districts = jsonObject.getDistricts().get(0).getDistricts();
|
||||
List<ResponseDataVo> cities = new ArrayList<>();
|
||||
for (ResponseDataVo district : districts) {
|
||||
cities.addAll(district.getDistricts());
|
||||
}
|
||||
Map<String, ResponseDataVo> collect = cities.stream().collect(Collectors.toMap(ResponseDataVo::getName, ResponseDataVo -> ResponseDataVo));
|
||||
List<String> collect1 = collect.keySet().stream().collect(Collectors.toList());
|
||||
Map<String,List<WxMainCitysForClientVO>> result = new HashMap<>();
|
||||
|
||||
try {
|
||||
Map<String, List<String>> codeGroup = ChangeChinesePinyinUtil.getCodeGroup(collect1);
|
||||
List<WxMainCitysForClientVO> citys = new ArrayList<>();
|
||||
codeGroup.forEach((k,v) -> {
|
||||
WxMainCitysForClientVO citysForLetter = new WxMainCitysForClientVO();
|
||||
citysForLetter.setIndex(k);
|
||||
List<String> list = new ArrayList<>();
|
||||
v.forEach(i->{
|
||||
WxCityForClientVO vo = new WxCityForClientVO();
|
||||
BeanUtils.copyProperties(collect.get(i),vo);
|
||||
list.add(vo.getName());
|
||||
});
|
||||
citysForLetter.setData(list);
|
||||
citys.add(citysForLetter);
|
||||
});
|
||||
result.put("data",citys);
|
||||
} catch (PinyinException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package com.wyh.front.controller;
|
||||
|
||||
|
||||
import com.wyh.common.core.AjaxResult;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.validator.FeedbackCreateValidate;
|
||||
import com.wyh.common.validator.FeedbackSearchValidate;
|
||||
import com.wyh.common.validator.FeedbackUpdateValidate;
|
||||
import com.wyh.common.validator.annotation.IDMust;
|
||||
import com.wyh.common.vo.FeedbackDetailVo;
|
||||
import com.wyh.common.vo.FeedbackListedVo;
|
||||
import com.wyh.front.service.IFeedbackService;
|
||||
import com.wyh.front.validate.common.IdValidate;
|
||||
import com.wyh.front.validate.common.PageValidate;
|
||||
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/feedback")
|
||||
@Api(tags = "反馈意见信息")
|
||||
public class FeedbackController {
|
||||
|
||||
@Resource
|
||||
IFeedbackService iFeedbackService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@ApiOperation(value="反馈意见信息列表")
|
||||
public AjaxResult<PageResult<FeedbackListedVo>> list(@Validated PageValidate pageValidate,
|
||||
@Validated FeedbackSearchValidate searchValidate) {
|
||||
PageResult<FeedbackListedVo> list = iFeedbackService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="反馈意见信息详情")
|
||||
public AjaxResult<FeedbackDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
FeedbackDetailVo detail = iFeedbackService.detail(id);
|
||||
return AjaxResult.success(detail);
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="反馈意见信息新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody FeedbackCreateValidate createValidate) {
|
||||
iFeedbackService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="反馈意见信息编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody FeedbackUpdateValidate updateValidate) {
|
||||
iFeedbackService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/del")
|
||||
@ApiOperation(value="反馈意见信息删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iFeedbackService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,7 +21,7 @@ import javax.annotation.Resource;
|
|||
|
||||
@RestController
|
||||
@RequestMapping("front/address")
|
||||
@Api(tags = "地址信息管理")
|
||||
@Api(tags = "地址信息")
|
||||
public class UserAddressController {
|
||||
|
||||
@Resource
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
package com.wyh.front.service;
|
||||
|
||||
import com.wyh.admin.validate.commons.PageValidate;
|
||||
import com.wyh.admin.validate.ExperimentCreateValidate;
|
||||
import com.wyh.admin.validate.ExperimentUpdateValidate;
|
||||
import com.wyh.admin.validate.ExperimentSearchValidate;
|
||||
import com.wyh.admin.vo.ExperimentListedVo;
|
||||
import com.wyh.admin.vo.ExperimentDetailVo;
|
||||
import com.wyh.common.core.PageResult;
|
||||
|
||||
/**
|
||||
* 实验信息服务接口类
|
||||
* @author wyh
|
||||
*/
|
||||
public interface IExperimentService {
|
||||
|
||||
/**
|
||||
* 实验信息列表
|
||||
*
|
||||
* @author wyh
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<ExperimentListedVo>
|
||||
*/
|
||||
PageResult<ExperimentListedVo> list(PageValidate pageValidate, ExperimentSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 实验信息详情
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
* @return ExperimentDetailVo
|
||||
*/
|
||||
ExperimentDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 实验信息新增
|
||||
*
|
||||
* @author wyh
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(ExperimentCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 实验信息编辑
|
||||
*
|
||||
* @author wyh
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(ExperimentUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 实验信息删除
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.wyh.front.service;
|
||||
|
||||
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.validator.FeedbackCreateValidate;
|
||||
import com.wyh.common.validator.FeedbackSearchValidate;
|
||||
import com.wyh.common.validator.FeedbackUpdateValidate;
|
||||
import com.wyh.common.vo.FeedbackDetailVo;
|
||||
import com.wyh.common.vo.FeedbackListedVo;
|
||||
import com.wyh.front.validate.common.PageValidate;
|
||||
|
||||
/**
|
||||
* 反馈意见信息服务接口类
|
||||
* @author LikeAdmin
|
||||
*/
|
||||
public interface IFeedbackService {
|
||||
|
||||
/**
|
||||
* 反馈意见信息列表
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<FeedbackListedVo>
|
||||
*/
|
||||
PageResult<FeedbackListedVo> list(PageValidate pageValidate, FeedbackSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 反馈意见信息详情
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param id 主键ID
|
||||
* @return FeedbackDetailVo
|
||||
*/
|
||||
FeedbackDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 反馈意见信息新增
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(FeedbackCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 反馈意见信息编辑
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(FeedbackUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 反馈意见信息删除
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param id 主键ID
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
package com.wyh.front.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.validate.commons.PageValidate;
|
||||
import com.wyh.admin.service.IExperimentService;
|
||||
import com.wyh.admin.validate.ExperimentCreateValidate;
|
||||
import com.wyh.admin.validate.ExperimentUpdateValidate;
|
||||
import com.wyh.admin.validate.ExperimentSearchValidate;
|
||||
import com.wyh.admin.vo.ExperimentListedVo;
|
||||
import com.wyh.admin.vo.ExperimentDetailVo;
|
||||
import com.wyh.common.config.GlobalConfig;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.entity.Experiment;
|
||||
import com.wyh.common.mapper.ExperimentMapper;
|
||||
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 ExperimentServiceImpl implements IExperimentService {
|
||||
|
||||
@Resource
|
||||
ExperimentMapper experimentMapper;
|
||||
|
||||
/**
|
||||
* 实验信息列表
|
||||
*
|
||||
* @author wyh
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<ExperimentListedVo>
|
||||
*/
|
||||
@Override
|
||||
public PageResult<ExperimentListedVo> list(PageValidate pageValidate, ExperimentSearchValidate searchValidate) {
|
||||
Integer page = pageValidate.getPageNo();
|
||||
Integer limit = pageValidate.getPageSize();
|
||||
|
||||
QueryWrapper<Experiment> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("is_delete", 0);
|
||||
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
|
||||
|
||||
experimentMapper.setSearch(queryWrapper, searchValidate, new String[]{
|
||||
"like:title:str",
|
||||
"=:experimentImg@experiment_img:str",
|
||||
"=:experimentVideo@experiment_video:str",
|
||||
"=:sort:int",
|
||||
"=:isShow@is_show:int",
|
||||
"=:classId@class_id:int",
|
||||
"=:content:str",
|
||||
});
|
||||
|
||||
IPage<Experiment> iPage = experimentMapper.selectPage(new Page<>(page, limit), queryWrapper);
|
||||
|
||||
List<ExperimentListedVo> list = new LinkedList<>();
|
||||
for(Experiment item : iPage.getRecords()) {
|
||||
ExperimentListedVo vo = new ExperimentListedVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
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 Experiment
|
||||
*/
|
||||
@Override
|
||||
public ExperimentDetailVo detail(Integer id) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在");
|
||||
|
||||
ExperimentDetailVo vo = new ExperimentDetailVo();
|
||||
BeanUtils.copyProperties(model, vo);
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息新增
|
||||
*
|
||||
* @author wyh
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(ExperimentCreateValidate createValidate) {
|
||||
Experiment model = new Experiment();
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setTitle(createValidate.getTitle());
|
||||
model.setExperimentImg(createValidate.getExperimentImg());
|
||||
model.setExperimentVideo(createValidate.getExperimentVideo());
|
||||
model.setSort(createValidate.getSort());
|
||||
model.setIsShow(createValidate.getIsShow());
|
||||
model.setClassId(createValidate.getClassId());
|
||||
model.setContent(createValidate.getContent());
|
||||
experimentMapper.insert(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息编辑
|
||||
*
|
||||
* @author wyh
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void edit(ExperimentUpdateValidate updateValidate) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", updateValidate.getId())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setId(updateValidate.getId());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setTitle(updateValidate.getTitle());
|
||||
model.setExperimentImg(updateValidate.getExperimentImg());
|
||||
model.setExperimentVideo(updateValidate.getExperimentVideo());
|
||||
model.setSort(updateValidate.getSort());
|
||||
model.setIsShow(updateValidate.getIsShow());
|
||||
model.setClassId(updateValidate.getClassId());
|
||||
model.setContent(updateValidate.getContent());
|
||||
experimentMapper.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 实验信息删除
|
||||
*
|
||||
* @author wyh
|
||||
* @param id 主键ID
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
Experiment model = experimentMapper.selectOne(
|
||||
new QueryWrapper<Experiment>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setIsDelete(1);
|
||||
model.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
experimentMapper.updateById(model);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
package com.wyh.front.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wyh.common.core.PageResult;
|
||||
import com.wyh.common.entity.Feedback;
|
||||
import com.wyh.common.mapper.FeedbackMapper;
|
||||
import com.wyh.common.util.TimeUtils;
|
||||
import com.wyh.common.util.UrlUtils;
|
||||
import com.wyh.common.validator.FeedbackCreateValidate;
|
||||
import com.wyh.common.validator.FeedbackSearchValidate;
|
||||
import com.wyh.common.validator.FeedbackUpdateValidate;
|
||||
import com.wyh.common.vo.FeedbackDetailVo;
|
||||
import com.wyh.common.vo.FeedbackListedVo;
|
||||
import com.wyh.front.service.IFeedbackService;
|
||||
import com.wyh.front.validate.common.PageValidate;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 反馈意见信息实现类
|
||||
* @author LikeAdmin
|
||||
*/
|
||||
@Service
|
||||
public class FeedbackServiceImpl implements IFeedbackService {
|
||||
|
||||
@Resource
|
||||
FeedbackMapper feedbackMapper;
|
||||
|
||||
/**
|
||||
* 反馈意见信息列表
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<FeedbackListedVo>
|
||||
*/
|
||||
@Override
|
||||
public PageResult<FeedbackListedVo> list(PageValidate pageValidate, FeedbackSearchValidate searchValidate) {
|
||||
Integer page = pageValidate.getPageNo();
|
||||
Integer limit = pageValidate.getPageSize();
|
||||
|
||||
QueryWrapper<Feedback> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("is_delete", 0);
|
||||
queryWrapper.orderByDesc("id");
|
||||
|
||||
feedbackMapper.setSearch(queryWrapper, searchValidate, new String[]{
|
||||
"=:content:str",
|
||||
"=:image:str",
|
||||
"=:userId@user_id:int",
|
||||
});
|
||||
|
||||
IPage<Feedback> iPage = feedbackMapper.selectPage(new Page<>(page, limit), queryWrapper);
|
||||
|
||||
List<FeedbackListedVo> list = new LinkedList<>();
|
||||
for(Feedback item : iPage.getRecords()) {
|
||||
FeedbackListedVo vo = new FeedbackListedVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
vo.setImage(UrlUtils.toAbsoluteUrl(item.getImage()));
|
||||
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 LikeAdmin
|
||||
* @param id 主键参数
|
||||
* @return Feedback
|
||||
*/
|
||||
@Override
|
||||
public FeedbackDetailVo detail(Integer id) {
|
||||
Feedback model = feedbackMapper.selectOne(
|
||||
new QueryWrapper<Feedback>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在");
|
||||
|
||||
FeedbackDetailVo vo = new FeedbackDetailVo();
|
||||
BeanUtils.copyProperties(model, vo);
|
||||
vo.setImage(UrlUtils.toAbsoluteUrl(model.getImage()));
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈意见信息新增
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void add(FeedbackCreateValidate createValidate) {
|
||||
Feedback model = new Feedback();
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setContent(createValidate.getContent());
|
||||
model.setImage(UrlUtils.toRelativeUrl(createValidate.getImage()));
|
||||
model.setUserId(createValidate.getUserId());
|
||||
feedbackMapper.insert(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈意见信息编辑
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
@Override
|
||||
public void edit(FeedbackUpdateValidate updateValidate) {
|
||||
Feedback model = feedbackMapper.selectOne(
|
||||
new QueryWrapper<Feedback>()
|
||||
.eq("id", updateValidate.getId())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setId(updateValidate.getId());
|
||||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
model.setContent(updateValidate.getContent());
|
||||
model.setImage(UrlUtils.toRelativeUrl(updateValidate.getImage()));
|
||||
model.setUserId(updateValidate.getUserId());
|
||||
feedbackMapper.updateById(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈意见信息删除
|
||||
*
|
||||
* @author LikeAdmin
|
||||
* @param id 主键ID
|
||||
*/
|
||||
@Override
|
||||
public void del(Integer id) {
|
||||
Feedback model = feedbackMapper.selectOne(
|
||||
new QueryWrapper<Feedback>()
|
||||
.eq("id", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.notNull(model, "数据不存在!");
|
||||
|
||||
model.setIsDelete(1);
|
||||
model.setDeleteTime(System.currentTimeMillis() / 1000);
|
||||
feedbackMapper.updateById(model);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -53,11 +53,24 @@
|
|||
<aliyun-java.version>4.5.16</aliyun-java.version>
|
||||
|
||||
<weixin.version>4.4.0</weixin.version>
|
||||
<pinyin.version>2.5.0</pinyin.version>
|
||||
<jyin.version>1.1.8</jyin.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.stuxuhai</groupId>
|
||||
<artifactId>jpinyin</artifactId>
|
||||
<version>${jyin.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.belerweb</groupId>
|
||||
<artifactId>pinyin4j</artifactId>
|
||||
<version>${pinyin.version}</version>
|
||||
</dependency>
|
||||
<!-- SpringBoot-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 实验信息列表
|
||||
export function experimentLists(params?: Record<string, any>) {
|
||||
return request.get({ url: '/experiment/list', params })
|
||||
}
|
||||
|
||||
// 实验信息详情
|
||||
export function experimentDetail(params: Record<string, any>) {
|
||||
return request.get({ url: '/experiment/detail', params })
|
||||
}
|
||||
|
||||
// 实验信息新增
|
||||
export function experimentAdd(params: Record<string, any>) {
|
||||
return request.post({ url: '/experiment/add', params })
|
||||
}
|
||||
|
||||
// 实验信息编辑
|
||||
export function experimentEdit(params: Record<string, any>) {
|
||||
return request.post({ url: '/experiment/edit', params })
|
||||
}
|
||||
|
||||
// 实验信息删除
|
||||
export function experimentDelete(params: Record<string, any>) {
|
||||
return request.post({ url: '/experiment/del', params })
|
||||
}
|
||||
|
|
@ -24,3 +24,7 @@ export function goodsEdit(params: Record<string, any>) {
|
|||
export function goodsDelete(params: Record<string, any>) {
|
||||
return request.post({ url: '/goods/del', params })
|
||||
}
|
||||
|
||||
export function goodsAll(){
|
||||
return request.get({url:'/goods/all'})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,222 @@
|
|||
<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="110px" :rules="formRules">
|
||||
<el-form-item label="实验标题" prop="title">
|
||||
<el-input v-model="formData.title" placeholder="请输入实验标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实验主图" prop="experimentImg">
|
||||
<material-picker size="300px" v-model="formData.experimentImg" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实验视频" prop="experimentVideo">
|
||||
<material-picker size="300px" v-model="formData.experimentVideo" type="video" />
|
||||
</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="goodsIds">
|
||||
<el-select
|
||||
v-model="formData.goodsIds"
|
||||
multiple
|
||||
collapse-tags
|
||||
placeholder="Select"
|
||||
style="width: 240px"
|
||||
> <el-option
|
||||
v-for="item in goodsOption"
|
||||
:key="item.id"
|
||||
:label="item.goodsName"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否展示" prop="isShow">
|
||||
<el-radio-group v-model="formData.isShow" >
|
||||
<el-radio :label="1">是</el-radio>
|
||||
<el-radio :label="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="分类id" prop="classId">
|
||||
<el-tree-select
|
||||
class="flex-1"
|
||||
v-model="formData.classId"
|
||||
:data="optionsData.class"
|
||||
clearable
|
||||
node-key="id"
|
||||
:props="{
|
||||
label: 'name'
|
||||
}"
|
||||
:default-expand-all="true"
|
||||
placeholder="请选择产品分类"
|
||||
check-strictly
|
||||
/>
|
||||
</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 { experimentEdit, experimentAdd, experimentDetail } from '@/api/experiment'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import feedback from '@/utils/feedback'
|
||||
import type { PropType } from 'vue'
|
||||
import {useDictOptions} from "@/hooks/useDictOptions";
|
||||
import {cateLists} from "@/api/cate";
|
||||
import {infoLists} from "@/api/info"
|
||||
import { goodsAll} from "@/api/goods"
|
||||
import {listAll} from "@/api/newscate";
|
||||
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 goodsOption = ref<any[]>([])
|
||||
const { optionsData } = useDictOptions<{
|
||||
class: any[]
|
||||
}>({
|
||||
class: {
|
||||
api: infoLists
|
||||
}
|
||||
})
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑实验信息' : '新增实验信息'
|
||||
})
|
||||
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
title: '',
|
||||
experimentImg: '',
|
||||
experimentVideo: '',
|
||||
sort: '',
|
||||
isShow: '',
|
||||
classId: '',
|
||||
content: '',
|
||||
goodsIds: []
|
||||
})
|
||||
|
||||
const formRules = {
|
||||
id: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入主键',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
title: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入实验标题',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
experimentImg: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入实验主图',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
experimentVideo: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入实验视频',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
sort: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排序',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
isShow: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入是否展示',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
classId: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入分类id',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
content: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入实验内容',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
const handleSubmit = async () => {
|
||||
await formRef.value?.validate()
|
||||
const data: any = { ...formData }
|
||||
mode.value == 'edit' ? await experimentEdit(data) : await experimentAdd(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 experimentDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
const getGoodsAllList = async () => {
|
||||
const res: any = await goodsAll()
|
||||
goodsOption.value = res || []
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
|
||||
getGoodsAllList()
|
||||
</script>
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
<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="experimentImg">
|
||||
<el-input class="w-[280px]" v-model="queryParams.experimentImg" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实验视频" prop="experimentVideo">
|
||||
<el-input class="w-[280px]" v-model="queryParams.experimentVideo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input class="w-[280px]" v-model="queryParams.sort" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否展示" prop="isShow">
|
||||
<el-input class="w-[280px]" v-model="queryParams.isShow" />
|
||||
</el-form-item>
|
||||
<el-form-item label="分类id" prop="classId">
|
||||
<el-input class="w-[280px]" v-model="queryParams.classId" />
|
||||
</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="['experiment: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="createTime" min-width="100" />
|
||||
<el-table-column label="更新时间" prop="updateTime" min-width="100" />
|
||||
<el-table-column label="实验标题" prop="title" min-width="100" />
|
||||
<el-table-column label="实验主图" prop="experimentImg" min-width="100" >
|
||||
<template #default="{ row }">
|
||||
<image-contain
|
||||
:width="100"
|
||||
:height="60"
|
||||
:src="row.experimentImg"
|
||||
:preview-src-list="[row.experimentImg]"
|
||||
preview-teleported
|
||||
hide-on-click-modal
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实验视频" prop="experimentVideo" min-width="100" >
|
||||
<template #default="{ row }">
|
||||
<file-item :uri="row.experimentVideo" file-size="100px" type="video"></file-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="className" min-width="100" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
v-perms="['experiment:edit']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['experiment: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="experiment">
|
||||
import { experimentDelete, experimentLists } from '@/api/experiment'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import {useDictData} from "@/hooks/useDictOptions";
|
||||
import FileItem from "@/components/material/file.vue";
|
||||
|
||||
|
||||
const showPreview = ref(false)
|
||||
const { dictData } = useDictData<{
|
||||
Integer: any[]
|
||||
}>(['Integer'])
|
||||
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
const showEdit = ref(false)
|
||||
const queryParams = reactive({
|
||||
title: '',
|
||||
experimentImg: '',
|
||||
experimentVideo: '',
|
||||
sort: '',
|
||||
isShow: '',
|
||||
classId: '',
|
||||
content: '',
|
||||
})
|
||||
|
||||
const { pager, getLists, resetPage, resetParams } = usePaging({
|
||||
fetchFun: experimentLists,
|
||||
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 experimentDelete({ id })
|
||||
feedback.msgSuccess('删除成功')
|
||||
getLists()
|
||||
}
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
Loading…
Reference in New Issue