This commit is contained in:
ls
2024-12-05 01:18:00 +08:00
parent 4f049af197
commit f05107abaa
34 changed files with 1512 additions and 510 deletions

View File

@@ -17,8 +17,6 @@ import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.modules.database.constant.ExperimentStatus; import org.jeecg.modules.database.constant.ExperimentStatus;
import org.jeecg.modules.database.dto.ExperimentDTO;
import org.jeecg.modules.database.dto.ExperimentUserDTO;
import org.jeecg.modules.database.entity.*; import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.*; import org.jeecg.modules.database.service.*;
import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUser;
@@ -28,7 +26,6 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @Description: 试验管理 * @Description: 试验管理
@@ -71,47 +68,15 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
@Operation(summary = "试验管理-分页列表查询") @Operation(summary = "试验管理-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
// @PermissionData(pageComponent="experiment/manage/ExperimentList") // @PermissionData(pageComponent="experiment/manage/ExperimentList")
public Result<IPage<ExperimentDTO>> queryPageList(Experiment experiment, public Result<IPage<Experiment>> queryPageList(Experiment experiment,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
QueryWrapper<Experiment> queryWrapper = QueryGenerator.initQueryWrapper(experiment, req.getParameterMap()); QueryWrapper<Experiment> queryWrapper = QueryGenerator.initQueryWrapper(experiment, req.getParameterMap());
Page<Experiment> page = new Page<Experiment>(pageNo, pageSize); Page<Experiment> page = new Page<>(pageNo, pageSize);
IPage<Experiment> pageList = experimentService.page(page, queryWrapper); IPage<Experiment> pageList = experimentService.page(page, queryWrapper);
List<ExperimentDTO> experimentDTOList = new ArrayList<>(); pageList.getRecords().forEach(v -> experimentService.fetchExperimentDetail(v));
pageList.getRecords().forEach(v -> { return Result.OK(pageList);
ExperimentDTO experimentDTO = ExperimentDTO.of(v);
if (StringUtils.isNotBlank(v.getSupervisor())) {
SysUser user = userService.getById(v.getSupervisor());
if (Objects.nonNull(user)) {
experimentDTO.setSupervisorName(user.getRealname());
}
}
List<ExperimentUser> user = experimentUserService.getByExperimentId(v.getId());
List<ExperimentUserDTO> userDTOList;
if (CollUtil.isNotEmpty(user)) {
List<ExperimentUserDTO> list = new ArrayList<>();
for (ExperimentUser experimentUser : user) {
ExperimentUserDTO userDTO = ExperimentUserDTO.of(experimentUser);
SysUser sysUser = userService.getById(experimentUser.getUserId());
if (Objects.nonNull(sysUser)) {
userDTO.setUserName(sysUser.getRealname());
}
list.add(userDTO);
}
userDTOList = list;
experimentDTO.setExperimentUserList(userDTOList);
experimentDTO.setExperimentUser(userDTOList.stream().map(ExperimentUserDTO::getUserId).collect(Collectors.joining(",")));
}
experimentDTOList.add(experimentDTO);
});
Page result = new Page();
result.setRecords(experimentDTOList);
result.setCurrent(pageList.getCurrent());
result.setTotal(pageList.getTotal());
result.setPages(pageList.getPages());
return Result.OK(result);
} }
/** /**
@@ -124,20 +89,19 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
@Operation(summary = "试验管理-添加") @Operation(summary = "试验管理-添加")
@RequiresPermissions("database:experiment:add") @RequiresPermissions("database:experiment:add")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody ExperimentDTO experiment, HttpServletRequest request) { public Result<String> add(@RequestBody Experiment experiment, HttpServletRequest request) {
Experiment experimentDomain = ExperimentDTO.to(experiment); String experimentNo = experiment.getExperimentNo();
String experimentNo = experimentDomain.getExperimentNo();
if (!StringUtils.startsWith(experimentNo, "KC")) { if (!StringUtils.startsWith(experimentNo, "KC")) {
return Result.error("实验编号格式不正确!"); return Result.error("实验编号格式不正确!");
} }
experimentDomain.setStatus(ExperimentStatus.PRE_TEST); experiment.setStatus(ExperimentStatus.PRE_TEST);
experimentService.save(experimentDomain); experimentService.save(experiment);
String experimentUser = experiment.getExperimentUser(); String experimentUser = experiment.getExperimentUser();
if (StringUtils.isNotBlank(experimentUser)) { if (StringUtils.isNotBlank(experimentUser)) {
for (String userId : experimentUser.split(",")) { for (String userId : experimentUser.split(",")) {
ExperimentUser userDomain = new ExperimentUser(); ExperimentUser userDomain = new ExperimentUser();
userDomain.setExperimentId(experimentDomain.getId()); userDomain.setExperimentId(experiment.getId());
userDomain.setUserId(userId); userDomain.setUserId(userId);
userDomain.setType("OPERATOR"); userDomain.setType("OPERATOR");
experimentUserService.save(userDomain); experimentUserService.save(userDomain);
@@ -146,7 +110,7 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
} }
ExperimentLog experimentLog = new ExperimentLog(); ExperimentLog experimentLog = new ExperimentLog();
experimentLog.setExperimentId(experimentDomain.getId()); experimentLog.setExperimentId(experiment.getId());
experimentLog.setLogContent("新建实验"); experimentLog.setLogContent("新建实验");
String username = JwtUtil.getUserNameByToken(request); String username = JwtUtil.getUserNameByToken(request);
SysUser userByName = userService.getUserByName(username); SysUser userByName = userService.getUserByName(username);
@@ -231,6 +195,7 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
experimentService.updateById(old); experimentService.updateById(old);
Experiment copied = old.copy(); Experiment copied = old.copy();
copied.setExperimentNo(experimentSequenceService.next());
experimentService.save(copied); experimentService.save(copied);
List<ExperimentAnnealProcess> experimentAnnealProcess = experimentAnnealProcessService.getByExperimentId(old.getId()); List<ExperimentAnnealProcess> experimentAnnealProcess = experimentAnnealProcessService.getByExperimentId(old.getId());
@@ -272,30 +237,13 @@ public class ExperimentController extends JeecgController<Experiment, IExperimen
//@AutoLog(value = "试验管理-通过id查询") //@AutoLog(value = "试验管理-通过id查询")
@Operation(summary = "试验管理-通过id查询") @Operation(summary = "试验管理-通过id查询")
@GetMapping(value = "/queryById") @GetMapping(value = "/queryById")
public Result<ExperimentDTO> queryById(@RequestParam(name = "id", required = true) String id) { public Result<Experiment> queryById(@RequestParam(name = "id", required = true) String id) {
Experiment experiment = experimentService.getById(id); Experiment experiment = experimentService.getById(id);
if (experiment == null) { if (experiment == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
ExperimentDTO dto = ExperimentDTO.of(experiment); experimentService.fetchExperimentDetail(experiment);
if (StringUtils.isNotBlank(dto.getSupervisor())) { return Result.OK(experiment);
SysUser user = userService.getById(dto.getSupervisor());
if (Objects.nonNull(user)) {
dto.setSupervisorName(user.getRealname());
}
}
List<ExperimentUser> userList = experimentUserService.getByExperimentId(dto.getId());
List<ExperimentUserDTO> userDTOList = new ArrayList<>();
for (ExperimentUser v : userList) {
ExperimentUserDTO userDTO = ExperimentUserDTO.of(v);
SysUser user = userService.getById(v.getUserId());
if (Objects.nonNull(user)) {
userDTO.setUserName(user.getRealname());
userDTOList.add(userDTO);
}
}
dto.setExperimentUserList(userDTOList);
return Result.OK(dto);
} }
/** /**

View File

@@ -1,6 +1,5 @@
package org.jeecg.modules.database.controller; package org.jeecg.modules.database.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,7 +14,6 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.database.dto.ExperimentRatingDTO;
import org.jeecg.modules.database.dto.ExperimentRatingUserDTO; import org.jeecg.modules.database.dto.ExperimentRatingUserDTO;
import org.jeecg.modules.database.entity.Experiment; import org.jeecg.modules.database.entity.Experiment;
import org.jeecg.modules.database.entity.ExperimentRating; import org.jeecg.modules.database.entity.ExperimentRating;
@@ -56,29 +54,15 @@ public class ExperimentRatingController extends JeecgController<ExperimentRating
//@AutoLog(value = "试验评分-分页列表查询") //@AutoLog(value = "试验评分-分页列表查询")
@Operation(summary = "试验评分-分页列表查询") @Operation(summary = "试验评分-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<ExperimentRatingDTO>> queryPageList(ExperimentRating experimentRating, public Result<IPage<ExperimentRating>> queryPageList(ExperimentRating experimentRating,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
QueryWrapper<ExperimentRating> queryWrapper = QueryGenerator.initQueryWrapper(experimentRating, req.getParameterMap()); QueryWrapper<ExperimentRating> queryWrapper = QueryGenerator.initQueryWrapper(experimentRating, req.getParameterMap());
Page<ExperimentRating> page = new Page<ExperimentRating>(pageNo, pageSize); Page<ExperimentRating> page = new Page<ExperimentRating>(pageNo, pageSize);
IPage<ExperimentRating> pageList = experimentRatingService.page(page, queryWrapper); IPage<ExperimentRating> pageList = experimentRatingService.page(page, queryWrapper);
List<ExperimentRatingDTO> result = new ArrayList<>(); pageList.getRecords().forEach(v -> experimentRatingService.fetchExperimentDetail(v));
pageList.getRecords().forEach(v -> { return Result.OK(pageList);
Experiment experiment = experimentService.getById(v.getExperimentId());
ExperimentRatingDTO experimentRatingDTO = new ExperimentRatingDTO();
BeanUtil.copyProperties(v, experimentRatingDTO);
experimentRatingDTO.setExperimentName(experiment.getName());
experimentRatingDTO.setExperimentNo(experiment.getExperimentNo());
result.add(experimentRatingDTO);
});
IPage<ExperimentRatingDTO> pageList1 = new Page();
pageList1.setRecords(result);
pageList1.setPages(pageList.getPages());
pageList1.setTotal(pageList.getTotal());
pageList1.setSize(pageList.getSize());
pageList1.setCurrent(pageList.getCurrent());
return Result.OK(pageList1);
} }
/** /**
@@ -117,7 +101,7 @@ public class ExperimentRatingController extends JeecgController<ExperimentRating
@Operation(summary = "试验评分-批量添加") @Operation(summary = "试验评分-批量添加")
@RequiresPermissions("database:experiment_rating:add") @RequiresPermissions("database:experiment_rating:add")
@PostMapping(value = "/addAll") @PostMapping(value = "/addAll")
public Result<String> batchAdd(@RequestBody ExperimentRatingDTO experimentRating) { public Result<String> batchAdd(@RequestBody ExperimentRating experimentRating) {
String experimentId = experimentRating.getExperimentId(); String experimentId = experimentRating.getExperimentId();
if (StringUtils.isBlank(experimentId)) { if (StringUtils.isBlank(experimentId)) {
return Result.error("试验数据不存在!"); return Result.error("试验数据不存在!");
@@ -204,6 +188,7 @@ public class ExperimentRatingController extends JeecgController<ExperimentRating
if (experimentRating == null) { if (experimentRating == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
experimentRatingService.fetchExperimentDetail(experimentRating);
return Result.OK(experimentRating); return Result.OK(experimentRating);
} }

View File

@@ -38,24 +38,11 @@ public class ExperimentSequenceController extends JeecgController<ExperimentSequ
@Operation(summary = "试验序列-获取序号") @Operation(summary = "试验序列-获取序号")
@GetMapping(value = "/next") @GetMapping(value = "/next")
public Result<String> next() { public Result<String> next() {
LambdaQueryWrapper<ExperimentSequence> queryWrapper = new LambdaQueryWrapper<>();
int year = DateUtil.year(new Date()); return Result.OK(experimentSequenceService.next());
queryWrapper.eq(ExperimentSequence::getSequenceYear, year);
queryWrapper.orderByDesc(ExperimentSequence::getCreateTime);
ExperimentSequence sequence = experimentSequenceService.getOne(queryWrapper, false);
if (sequence == null) {
sequence = new ExperimentSequence();
sequence.setSequenceValue(0);
sequence.setSequenceYear(year + "");
experimentSequenceService.save(sequence);
}
return Result.OK(assembleSequence(sequence));
} }
public String assembleSequence(ExperimentSequence experimentSequence) {
return "KC-" + experimentSequence.getSequenceYear() + "-JL-" + StringUtils.leftPad((experimentSequence.getSequenceValue() + 1) + "",
3, "0");
}
// //
///** ///**
// * 添加 // * 添加

View File

@@ -17,7 +17,6 @@ import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.modules.database.constant.ExperimentStatus; import org.jeecg.modules.database.constant.ExperimentStatus;
import org.jeecg.modules.database.dto.ExperimentUserDTO;
import org.jeecg.modules.database.entity.*; import org.jeecg.modules.database.entity.*;
import org.jeecg.modules.database.service.*; import org.jeecg.modules.database.service.*;
import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUser;
@@ -62,28 +61,15 @@ public class ExperimentUserController extends JeecgController<ExperimentUser, IE
//@AutoLog(value = "试验人员-分页列表查询") //@AutoLog(value = "试验人员-分页列表查询")
@Operation(summary = "试验人员-分页列表查询") @Operation(summary = "试验人员-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<ExperimentUserDTO>> queryPageList(ExperimentUser experimentUser, public Result<IPage<ExperimentUser>> queryPageList(ExperimentUser experimentUser,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
QueryWrapper<ExperimentUser> queryWrapper = QueryGenerator.initQueryWrapper(experimentUser, req.getParameterMap()); QueryWrapper<ExperimentUser> queryWrapper = QueryGenerator.initQueryWrapper(experimentUser, req.getParameterMap());
Page<ExperimentUser> page = new Page<>(pageNo, pageSize); Page<ExperimentUser> page = new Page<>(pageNo, pageSize);
IPage<ExperimentUser> pageList = experimentUserService.page(page, queryWrapper); IPage<ExperimentUser> pageList = experimentUserService.page(page, queryWrapper);
List<ExperimentUserDTO> userDTOList = new ArrayList<>(); pageList.getRecords().forEach(v -> experimentUserService.fetchUserName(v));
pageList.getRecords().forEach(v -> { return Result.OK(pageList);
ExperimentUserDTO userDTO = ExperimentUserDTO.of(v);
SysUser user = userService.getById(v.getUserId());
if (Objects.nonNull(user)) {
userDTO.setUserName(user.getRealname());
userDTOList.add(userDTO);
}
});
Page result = new Page();
result.setRecords(userDTOList);
result.setCurrent(pageList.getCurrent());
result.setTotal(pageList.getTotal());
result.setPages(pageList.getPages());
return Result.OK(result);
} }
/** /**
@@ -244,17 +230,13 @@ public class ExperimentUserController extends JeecgController<ExperimentUser, IE
//@AutoLog(value = "试验人员-通过id查询") //@AutoLog(value = "试验人员-通过id查询")
@Operation(summary = "试验人员-通过id查询") @Operation(summary = "试验人员-通过id查询")
@GetMapping(value = "/queryById") @GetMapping(value = "/queryById")
public Result<ExperimentUserDTO> queryById(@RequestParam(name = "id", required = true) String id) { public Result<ExperimentUser> queryById(@RequestParam(name = "id", required = true) String id) {
ExperimentUser experimentUser = experimentUserService.getById(id); ExperimentUser experimentUser = experimentUserService.getById(id);
if (experimentUser == null) { if (experimentUser == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
ExperimentUserDTO userDTO = ExperimentUserDTO.of(experimentUser); experimentUserService.fetchUserName(experimentUser);
SysUser user = userService.getById(experimentUser.getUserId()); return Result.OK(experimentUser);
if (Objects.nonNull(user)) {
userDTO.setUserName(user.getRealname());
}
return Result.OK(userDTO);
} }
/** /**
@@ -266,7 +248,7 @@ public class ExperimentUserController extends JeecgController<ExperimentUser, IE
//@AutoLog(value = "试验评定-通过id查询") //@AutoLog(value = "试验评定-通过id查询")
@Operation(summary = "测试过程-通过实验ID查询") @Operation(summary = "测试过程-通过实验ID查询")
@GetMapping(value = "/queryByExperimentId") @GetMapping(value = "/queryByExperimentId")
public Result<List<ExperimentUserDTO>> queryByExperimentalId( public Result<List<ExperimentUser>> queryByExperimentalId(
@RequestParam(name = "experimentId", required = true) String experimentalId) { @RequestParam(name = "experimentId", required = true) String experimentalId) {
LambdaQueryWrapper<ExperimentUser> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ExperimentUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ExperimentUser::getExperimentId, experimentalId); queryWrapper.eq(ExperimentUser::getExperimentId, experimentalId);
@@ -274,16 +256,8 @@ public class ExperimentUserController extends JeecgController<ExperimentUser, IE
if (list == null) { if (list == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
List<ExperimentUserDTO> userDTOList = new ArrayList<>(); list.forEach(v -> experimentUserService.fetchUserName(v));
list.forEach(v -> { return Result.OK(list);
ExperimentUserDTO userDTO = ExperimentUserDTO.of(v);
SysUser user = userService.getById(v.getUserId());
if (Objects.nonNull(user)) {
userDTO.setUserName(user.getRealname());
userDTOList.add(userDTO);
}
});
return Result.OK(userDTOList);
} }
/** /**

View File

@@ -1,144 +0,0 @@
/*
* Ant Group
* Copyright (c) 2004-2024 All Rights Reserved.
*/
package org.jeecg.modules.database.dto;
import cn.hutool.core.bean.BeanUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.jeecg.modules.database.entity.Experiment;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author lise
* @version ExperimentDTO.java, v 0.1 2024年11月16日 21:13 lise
*/
@Getter
@Setter
public class ExperimentDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 创建人
*/
private String createBy;
/**
* 创建日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 所属部门
*/
private String sysOrgCode;
/**
* 试验编号
*/
private String experimentNo;
/**
* 名称
*/
private String name;
/**
* 试验类型
*/
private String type;
/**
* 试验日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
/**
* 试验日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
/**
* 辐射源类型
*/
private String radiationSourceType;
/**
* 委托方名称
*/
private String clientName;
/**
* 样品型号
*/
private String sampleModel;
/**
* 试验负责人
*/
private String supervisor;
/**
* 状态
*/
private String status;
/**
* 样品信息
*/
private String sampleInfo;
/**
* 辐照板
*/
private String irradiationBoard;
/**
* 偏置条件
*/
private String deviationCondition;
/**
* 加偏设备
*/
private String deviationEquipment;
/**
* 复制次数
*/
private Integer copyCount;
/**
* 试验负责人
*/
private String supervisorName;
/**
* 试验人员
*/
private List<ExperimentUserDTO> experimentUserList;
private String experimentUser;
public static ExperimentDTO of(Experiment experiment) {
ExperimentDTO dto = new ExperimentDTO();
BeanUtil.copyProperties(experiment, dto);
return dto;
}
public static Experiment to(ExperimentDTO experiment) {
Experiment dto = new Experiment();
BeanUtil.copyProperties(experiment, dto);
return dto;
}
}

View File

@@ -1,84 +0,0 @@
/*
* Ant Group
* Copyright (c) 2004-2024 All Rights Reserved.
*/
package org.jeecg.modules.database.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* @author lise
* @version ExperimentRatingDTO.java, v 0.1 2024年11月16日 13:46 lise
*/
@Getter
@Setter
public class ExperimentRatingDTO {
/**
* 主键
*/
private String id;
/**
* 创建人
*/
private String createBy;
/**
* 创建日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 所属部门
*/
private String sysOrgCode;
/**
* 实验ID
*/
private String experimentId;
/**
* 评分人
*/
private String rateUserId;
/**
* 总分数
*/
private Integer totalScore;
/**
* 基础分
*/
private Integer baseScore;
/**
* 完成分
*/
private Integer completionScore;
/**
* 难度分
*/
private Integer difficultyScore;
/**
* 管理支撑分
*/
private Integer managementScore;
private String experimentName;
private String experimentNo;
@Schema(description = "评分人列表")
private List<ExperimentRatingUserDTO> rateUserList;
}

View File

@@ -1,75 +0,0 @@
package org.jeecg.modules.database.dto;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.modules.database.entity.Experiment;
import org.jeecg.modules.database.entity.ExperimentUser;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: 试验人员
* @Author: jeecg-boot
* @Date: 2024-08-30
* @Version: V1.0
*/
@Data
public class ExperimentUserDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 创建人
*/
private String createBy;
/**
* 创建日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 所属部门
*/
private String sysOrgCode;
/**
* 试验ID
*/
private String experimentId;
/**
* 人员
*/
private String userId;
private String userName;
/**
* 类型
*/
private String type;
public static ExperimentUserDTO of(ExperimentUser experiment) {
ExperimentUserDTO dto = new ExperimentUserDTO();
BeanUtil.copyProperties(experiment, dto);
return dto;
}
}

View File

@@ -10,7 +10,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.database.constant.ExperimentStatus; import org.jeecg.modules.database.constant.ExperimentStatus;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@@ -163,13 +162,23 @@ public class Experiment implements Serializable {
@Schema(description = "复制次数") @Schema(description = "复制次数")
private Integer copyCount; private Integer copyCount;
/** /**
* 试验人员ID, 逗号分割多个 * 试验人员ID, 逗号分割多个
*/ */
@TableField(exist = false) @TableField(exist = false)
private String experimentUser; private String experimentUser;
/**
* 试验负责人
*/
@TableField(exist = false)
private String supervisorName;
/**
* 试验人员
*/
@TableField(exist = false)
private List<ExperimentUser> experimentUserList;
public void addCopyCount() { public void addCopyCount() {
if (Objects.isNull(copyCount)) { if (Objects.isNull(copyCount)) {
@@ -202,8 +211,6 @@ public class Experiment implements Serializable {
}); });
experiment.setDeviationEquipment(JSON.toJSONString(boardList)); experiment.setDeviationEquipment(JSON.toJSONString(boardList));
} }
experiment.setExperimentNo("NO-" + DateUtils.formatDate(new Date(), "yyyyMMddHHmmss"));
experiment.setName(this.name + "-" + getCopyCount());
experiment.setId(null); experiment.setId(null);
experiment.setCopyCount(0); experiment.setCopyCount(0);
experiment.setStatus(ExperimentStatus.PRE_TEST); experiment.setStatus(ExperimentStatus.PRE_TEST);

View File

@@ -1,85 +1,116 @@
package org.jeecg.modules.database.entity; package org.jeecg.modules.database.entity;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.*;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.modules.database.dto.ExperimentRatingUserDTO;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/** /**
* @Description: 试验评分 * @Description: 试验评分
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2024-11-16 * @Date: 2024-11-16
* @Version: V1.0 * @Version: V1.0
*/ */
@Data @Data
@TableName("experiment_rating") @TableName("experiment_rating")
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Schema(description="试验评分") @Schema(description = "试验评分")
public class ExperimentRating implements Serializable { public class ExperimentRating implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**主键*/ /**
@TableId(type = IdType.ASSIGN_ID) * 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键") @Schema(description = "主键")
private String id; private String id;
/**创建人*/ /**
* 创建人
*/
@Schema(description = "创建人") @Schema(description = "创建人")
private String createBy; private String createBy;
/**创建日期*/ /**
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") * 创建日期
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") */
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期") @Schema(description = "创建日期")
private Date createTime; private Date createTime;
/**更新人*/ /**
* 更新人
*/
@Schema(description = "更新人") @Schema(description = "更新人")
private String updateBy; private String updateBy;
/**更新日期*/ /**
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") * 更新日期
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") */
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期") @Schema(description = "更新日期")
private Date updateTime; private Date updateTime;
/**所属部门*/ /**
* 所属部门
*/
@Schema(description = "所属部门") @Schema(description = "所属部门")
private String sysOrgCode; private String sysOrgCode;
/**实验ID*/ /**
@Excel(name = "实验ID", width = 15) * 实验ID
*/
@Excel(name = "实验ID", width = 15)
@Schema(description = "实验ID") @Schema(description = "实验ID")
private String experimentId; private String experimentId;
/**评分人*/ /**
@Excel(name = "评分人", width = 15) * 评分人
*/
@Excel(name = "评分人", width = 15)
@Schema(description = "评分人") @Schema(description = "评分人")
private String rateUserId; private String rateUserId;
/**总分数*/ /**
@Excel(name = "总分数", width = 15) * 总分数
*/
@Excel(name = "总分数", width = 15)
@Schema(description = "总分数") @Schema(description = "总分数")
private Integer totalScore; private Integer totalScore;
/**基础分*/ /**
@Excel(name = "基础分", width = 15) * 基础分
*/
@Excel(name = "基础分", width = 15)
@Schema(description = "基础分") @Schema(description = "基础分")
private Integer baseScore; private Integer baseScore;
/**完成分*/ /**
@Excel(name = "完成分", width = 15) * 完成分
*/
@Excel(name = "完成分", width = 15)
@Schema(description = "完成分") @Schema(description = "完成分")
private Integer completionScore; private Integer completionScore;
/**难度分*/ /**
@Excel(name = "难度分", width = 15) * 难度分
*/
@Excel(name = "难度分", width = 15)
@Schema(description = "难度分") @Schema(description = "难度分")
private Integer difficultyScore; private Integer difficultyScore;
/**管理支撑分*/ /**
@Excel(name = "管理支撑分", width = 15) * 管理支撑分
*/
@Excel(name = "管理支撑分", width = 15)
@Schema(description = "管理支撑分") @Schema(description = "管理支撑分")
private Integer managementScore; private Integer managementScore;
@TableField(exist = false)
private String experimentName;
@TableField(exist = false)
private String experimentNo;
@TableField(exist = false)
@Schema(description = "评分人列表")
private List<ExperimentRatingUserDTO> rateUserList;
} }

View File

@@ -1,8 +1,6 @@
package org.jeecg.modules.database.entity; package org.jeecg.modules.database.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -45,7 +43,7 @@ public class ExperimentUser implements Serializable {
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期") @Schema(description = "创建日期")
private Date createTime; private Date createTime;
/** /**
* 更新人 * 更新人
*/ */
@@ -57,7 +55,7 @@ public class ExperimentUser implements Serializable {
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期") @Schema(description = "更新日期")
private Date updateTime; private Date updateTime;
/** /**
* 所属部门 * 所属部门
*/ */
@@ -75,6 +73,8 @@ public class ExperimentUser implements Serializable {
@Excel(name = "人员", width = 15) @Excel(name = "人员", width = 15)
@Schema(description = "人员") @Schema(description = "人员")
private String userId; private String userId;
@TableField(exist = false)
private String userName;
/** /**
* 类型 * 类型
*/ */

View File

@@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IExperimentRatingService extends IService<ExperimentRating> { public interface IExperimentRatingService extends IService<ExperimentRating> {
void fetchExperimentDetail(ExperimentRating experimentRating);
} }

View File

@@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IExperimentSequenceService extends IService<ExperimentSequence> { public interface IExperimentSequenceService extends IService<ExperimentSequence> {
String next();
} }

View File

@@ -11,4 +11,5 @@ import org.jeecg.modules.database.entity.Experiment;
*/ */
public interface IExperimentService extends IService<Experiment> { public interface IExperimentService extends IService<Experiment> {
void fetchExperimentDetail(Experiment experiment);
} }

View File

@@ -15,4 +15,6 @@ public interface IExperimentUserService extends IService<ExperimentUser> {
List<ExperimentUser> getByExperimentId(String experimentId); List<ExperimentUser> getByExperimentId(String experimentId);
void removeByExperimentId(String experimentId); void removeByExperimentId(String experimentId);
void fetchUserName(ExperimentUser experimentUser);
} }

View File

@@ -1,19 +1,38 @@
package org.jeecg.modules.database.service.impl; package org.jeecg.modules.database.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.database.entity.Experiment;
import org.jeecg.modules.database.entity.ExperimentRating; import org.jeecg.modules.database.entity.ExperimentRating;
import org.jeecg.modules.database.mapper.ExperimentRatingMapper; import org.jeecg.modules.database.mapper.ExperimentRatingMapper;
import org.jeecg.modules.database.service.IExperimentRatingService; import org.jeecg.modules.database.service.IExperimentRatingService;
import org.jeecg.modules.database.service.IExperimentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.Objects;
/** /**
* @Description: 试验评分 * @Description: 试验评分
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2024-11-16 * @Date: 2024-11-16
* @Version: V1.0 * @Version: V1.0
*/ */
@Service @Service
public class ExperimentRatingServiceImpl extends ServiceImpl<ExperimentRatingMapper, ExperimentRating> implements IExperimentRatingService { public class ExperimentRatingServiceImpl extends ServiceImpl<ExperimentRatingMapper, ExperimentRating> implements IExperimentRatingService {
@Autowired
private IExperimentService experimentService;
@Override
public void fetchExperimentDetail(ExperimentRating experimentRating) {
if (Objects.isNull(experimentRating)) {
return;
}
Experiment experiment = experimentService.getById(experimentRating.getExperimentId());
if (Objects.isNull(experiment)) {
return;
}
experimentRating.setExperimentName(experiment.getName());
experimentRating.setExperimentNo(experiment.getExperimentNo());
}
} }

View File

@@ -1,19 +1,44 @@
package org.jeecg.modules.database.service.impl; package org.jeecg.modules.database.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.entity.ExperimentSequence; import org.jeecg.modules.database.entity.ExperimentSequence;
import org.jeecg.modules.database.mapper.ExperimentSequenceMapper; import org.jeecg.modules.database.mapper.ExperimentSequenceMapper;
import org.jeecg.modules.database.service.IExperimentSequenceService; import org.jeecg.modules.database.service.IExperimentSequenceService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.Date;
/** /**
* @Description: 试验序列 * @Description: 试验序列
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2024-12-04 * @Date: 2024-12-04
* @Version: V1.0 * @Version: V1.0
*/ */
@Service @Service
public class ExperimentSequenceServiceImpl extends ServiceImpl<ExperimentSequenceMapper, ExperimentSequence> implements IExperimentSequenceService { public class ExperimentSequenceServiceImpl extends ServiceImpl<ExperimentSequenceMapper, ExperimentSequence>
implements IExperimentSequenceService {
@Override
public String next() {
LambdaQueryWrapper<ExperimentSequence> queryWrapper = new LambdaQueryWrapper<>();
int year = DateUtil.year(new Date());
queryWrapper.eq(ExperimentSequence::getSequenceYear, year);
queryWrapper.orderByDesc(ExperimentSequence::getCreateTime);
ExperimentSequence sequence = getOne(queryWrapper, false);
if (sequence == null) {
sequence = new ExperimentSequence();
sequence.setSequenceValue(0);
sequence.setSequenceYear(year + "");
save(sequence);
}
return assembleSequence(sequence);
}
public String assembleSequence(ExperimentSequence experimentSequence) {
return "KC-" + experimentSequence.getSequenceYear() + "-JL-" + StringUtils.leftPad((experimentSequence.getSequenceValue() + 1) + "",
3, "0");
}
} }

View File

@@ -1,11 +1,22 @@
package org.jeecg.modules.database.service.impl; package org.jeecg.modules.database.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.database.entity.Experiment; import org.jeecg.modules.database.entity.Experiment;
import org.jeecg.modules.database.entity.ExperimentUser;
import org.jeecg.modules.database.mapper.ExperimentMapper; import org.jeecg.modules.database.mapper.ExperimentMapper;
import org.jeecg.modules.database.service.IExperimentService; import org.jeecg.modules.database.service.IExperimentService;
import org.jeecg.modules.database.service.IExperimentUserService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* @Description: 试验管理 * @Description: 试验管理
* @Author: jeecg-boot * @Author: jeecg-boot
@@ -14,5 +25,29 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class ExperimentServiceImpl extends ServiceImpl<ExperimentMapper, Experiment> implements IExperimentService { public class ExperimentServiceImpl extends ServiceImpl<ExperimentMapper, Experiment> implements IExperimentService {
@Autowired
private ISysUserService userService;
@Autowired
private IExperimentUserService experimentUserService;
@Override
public void fetchExperimentDetail(Experiment experiment) {
if (StringUtils.isNotBlank(experiment.getSupervisor())) {
SysUser user = userService.getById(experiment.getSupervisor());
if (Objects.nonNull(user)) {
experiment.setSupervisorName(user.getRealname());
}
}
List<ExperimentUser> userList = experimentUserService.getByExperimentId(experiment.getId());
if (CollUtil.isNotEmpty(userList)) {
userList.forEach(experimentUser -> {
SysUser sysUser = userService.getById(experimentUser.getUserId());
if (Objects.nonNull(sysUser)) {
experimentUser.setUserName(sysUser.getRealname());
}
});
}
experiment.setExperimentUserList(userList);
experiment.setExperimentUser(userList.stream().map(ExperimentUser::getUserId).collect(Collectors.joining(",")));
}
} }

View File

@@ -5,9 +5,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.database.entity.ExperimentUser; import org.jeecg.modules.database.entity.ExperimentUser;
import org.jeecg.modules.database.mapper.ExperimentUserMapper; import org.jeecg.modules.database.mapper.ExperimentUserMapper;
import org.jeecg.modules.database.service.IExperimentUserService; import org.jeecg.modules.database.service.IExperimentUserService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @Description: 试验人员 * @Description: 试验人员
@@ -18,6 +22,9 @@ import java.util.List;
@Service @Service
public class ExperimentUserServiceImpl extends ServiceImpl<ExperimentUserMapper, ExperimentUser> implements IExperimentUserService { public class ExperimentUserServiceImpl extends ServiceImpl<ExperimentUserMapper, ExperimentUser> implements IExperimentUserService {
@Autowired
private ISysUserService userService;
@Override @Override
public List<ExperimentUser> getByExperimentId(String experimentId) { public List<ExperimentUser> getByExperimentId(String experimentId) {
return list(new LambdaQueryWrapper<ExperimentUser>().eq(ExperimentUser::getExperimentId, experimentId)); return list(new LambdaQueryWrapper<ExperimentUser>().eq(ExperimentUser::getExperimentId, experimentId));
@@ -28,4 +35,15 @@ public class ExperimentUserServiceImpl extends ServiceImpl<ExperimentUserMapper,
List<ExperimentUser> userList = getByExperimentId(experimentId); List<ExperimentUser> userList = getByExperimentId(experimentId);
userList.forEach(user -> removeById(user.getId())); userList.forEach(user -> removeById(user.getId()));
} }
@Override
public void fetchUserName(ExperimentUser experimentUser) {
if (Objects.isNull(experimentUser)) {
return;
}
SysUser user = userService.getById(experimentUser.getUserId());
if (Objects.nonNull(user)) {
experimentUser.setUserName(user.getRealname());
}
}
} }

View File

@@ -0,0 +1,113 @@
<template>
<view>
<!--标题和返回-->
<cu-custom :bgColor="NavBarColor" isBack :backRouterName="backRouteName">
<block slot="backText">返回</block>
<block slot="content">试验样品信息</block>
</cu-custom>
<!--表单区域-->
<view>
<form>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">试验ID</text></view>
<input placeholder="请输入试验ID" v-model="model.experimentId"/>
</view>
</view>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">样品类型:</text></view>
<input placeholder="请输入样品类型" v-model="model.sampleType"/>
</view>
</view>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">样品型号:</text></view>
<input placeholder="请输入样品型号" v-model="model.sampleModel"/>
</view>
</view>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">样品批次:</text></view>
<input placeholder="请输入样品批次" v-model="model.sampleBatch"/>
</view>
</view>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">生产厂家:</text></view>
<input placeholder="请输入生产厂家" v-model="model.sampleManufacturer"/>
</view>
</view>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">图片:</text></view>
<input placeholder="请输入图片" v-model="model.sampleImage"/>
</view>
</view>
<view class="padding">
<button class="cu-btn block bg-blue margin-tb-sm lg" @click="onSubmit">
<text v-if="loading" class="cuIcon-loading2 cuIconfont-spin"></text>提交
</button>
</view>
</form>
</view>
</view>
</template>
<script>
import myDate from '@/components/my-componets/my-date.vue'
export default {
name: "ExperimentSampleInfoForm",
components:{ myDate },
props:{
formData:{
type:Object,
default:()=>{},
required:false
}
},
data(){
return {
CustomBar: this.CustomBar,
NavBarColor: this.NavBarColor,
loading:false,
model: {},
backRouteName:'index',
url: {
queryById: "/database/experimentSampleInfo/queryById",
add: "/database/experimentSampleInfo/add",
edit: "/database/experimentSampleInfo/edit",
},
}
},
created(){
this.initFormData();
},
methods:{
initFormData(){
if(this.formData){
let dataId = this.formData.dataId;
this.$http.get(this.url.queryById,{params:{id:dataId}}).then((res)=>{
if(res.data.success){
console.log("表单数据",res);
this.model = res.data.result;
}
})
}
},
onSubmit() {
let myForm = {...this.model};
this.loading = true;
let url = myForm.id?this.url.edit:this.url.add;
this.$http.post(url,myForm).then(res=>{
console.log("res",res)
this.loading = false
this.$Router.push({name:this.backRouteName})
}).catch(()=>{
this.loading = false
});
}
}
}
</script>

View File

@@ -0,0 +1,44 @@
<template>
<view>
<!--标题和返回-->
<cu-custom :bgColor="NavBarColor" isBack>
<block slot="backText">返回</block>
<block slot="content">试验样品信息</block>
</cu-custom>
<!--滚动加载列表-->
<mescroll-body ref="mescrollRef" bottom="88" @init="mescrollInit" :up="upOption" :down="downOption" @down="downCallback" @up="upCallback">
<view class="cu-list menu">
<view class="cu-item" v-for="(item,index) in list" :key="index" @click="goHome">
<view class="flex" style="width:100%">
<text class="text-lg" style="color: #000;">
{{ item.createBy}}
</text>
</view>
</view>
</view>
</mescroll-body>
</view>
</template>
<script>
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
import Mixin from "@/common/mixin/Mixin.js";
export default {
name: '试验样品信息',
mixins: [MescrollMixin,Mixin],
data() {
return {
CustomBar:this.CustomBar,
NavBarColor:this.NavBarColor,
url: "/database/experimentSampleInfo/list",
};
},
methods: {
goHome(){
this.$Router.push({name: "index"})
}
}
}
</script>

View File

@@ -0,0 +1,83 @@
<template>
<view>
<!--标题和返回-->
<cu-custom :bgColor="NavBarColor" isBack :backRouterName="backRouteName">
<block slot="backText">返回</block>
<block slot="content">试验序列</block>
</cu-custom>
<!--表单区域-->
<view>
<form>
<view class="cu-form-group">
<view class="flex align-center">
<view class="title"><text space="ensp">序列值:</text></view>
<input placeholder="请输入序列值" v-model="model.sequenceValue"/>
</view>
</view>
<view class="padding">
<button class="cu-btn block bg-blue margin-tb-sm lg" @click="onSubmit">
<text v-if="loading" class="cuIcon-loading2 cuIconfont-spin"></text>提交
</button>
</view>
</form>
</view>
</view>
</template>
<script>
import myDate from '@/components/my-componets/my-date.vue'
export default {
name: "ExperimentSequenceForm",
components:{ myDate },
props:{
formData:{
type:Object,
default:()=>{},
required:false
}
},
data(){
return {
CustomBar: this.CustomBar,
NavBarColor: this.NavBarColor,
loading:false,
model: {},
backRouteName:'index',
url: {
queryById: "/database/experimentSequence/queryById",
add: "/database/experimentSequence/add",
edit: "/database/experimentSequence/edit",
},
}
},
created(){
this.initFormData();
},
methods:{
initFormData(){
if(this.formData){
let dataId = this.formData.dataId;
this.$http.get(this.url.queryById,{params:{id:dataId}}).then((res)=>{
if(res.data.success){
console.log("表单数据",res);
this.model = res.data.result;
}
})
}
},
onSubmit() {
let myForm = {...this.model};
this.loading = true;
let url = myForm.id?this.url.edit:this.url.add;
this.$http.post(url,myForm).then(res=>{
console.log("res",res)
this.loading = false
this.$Router.push({name:this.backRouteName})
}).catch(()=>{
this.loading = false
});
}
}
}
</script>

View File

@@ -0,0 +1,44 @@
<template>
<view>
<!--标题和返回-->
<cu-custom :bgColor="NavBarColor" isBack>
<block slot="backText">返回</block>
<block slot="content">试验序列</block>
</cu-custom>
<!--滚动加载列表-->
<mescroll-body ref="mescrollRef" bottom="88" @init="mescrollInit" :up="upOption" :down="downOption" @down="downCallback" @up="upCallback">
<view class="cu-list menu">
<view class="cu-item" v-for="(item,index) in list" :key="index" @click="goHome">
<view class="flex" style="width:100%">
<text class="text-lg" style="color: #000;">
{{ item.createBy}}
</text>
</view>
</view>
</view>
</mescroll-body>
</view>
</template>
<script>
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
import Mixin from "@/common/mixin/Mixin.js";
export default {
name: '试验序列',
mixins: [MescrollMixin,Mixin],
data() {
return {
CustomBar:this.CustomBar,
NavBarColor:this.NavBarColor,
url: "/database/experimentSequence/list",
};
},
methods: {
goHome(){
this.$Router.push({name: "index"})
}
}
}
</script>

View File

@@ -0,0 +1,64 @@
import {defHttp} from '/@/utils/http/axios';
import { useMessage } from "/@/hooks/web/useMessage";
const { createConfirm } = useMessage();
enum Api {
list = '/database/experimentSampleInfo/list',
save='/database/experimentSampleInfo/add',
edit='/database/experimentSampleInfo/edit',
deleteOne = '/database/experimentSampleInfo/delete',
deleteBatch = '/database/experimentSampleInfo/deleteBatch',
importExcel = '/database/experimentSampleInfo/importExcel',
exportXls = '/database/experimentSampleInfo/exportXls',
}
/**
* 导出api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* 导入api
*/
export const getImportUrl = Api.importExcel;
/**
* 列表接口
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
* 删除单个
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
* 批量删除
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
createConfirm({
iconType: 'warning',
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
* 保存或者更新
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

View File

@@ -0,0 +1,105 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '试验ID',
align:"center",
dataIndex: 'experimentId'
},
{
title: '样品类型',
align:"center",
dataIndex: 'sampleType'
},
{
title: '样品型号',
align:"center",
dataIndex: 'sampleModel'
},
{
title: '样品批次',
align:"center",
dataIndex: 'sampleBatch'
},
{
title: '生产厂家',
align:"center",
dataIndex: 'sampleManufacturer'
},
{
title: '图片',
align:"center",
dataIndex: 'sampleImage'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '试验ID',
field: 'experimentId',
component: 'Input',
dynamicRules: ({model,schema}) => {
return [
{ required: true, message: '请输入试验ID!'},
];
},
},
{
label: '样品类型',
field: 'sampleType',
component: 'Input',
},
{
label: '样品型号',
field: 'sampleModel',
component: 'Input',
},
{
label: '样品批次',
field: 'sampleBatch',
component: 'Input',
},
{
label: '生产厂家',
field: 'sampleManufacturer',
component: 'Input',
},
{
label: '图片',
field: 'sampleImage',
component: 'Input',
},
// TODO 主键隐藏字段目前写死为ID
{
label: '',
field: 'id',
component: 'Input',
show: false
},
];
// 高级查询数据
export const superQuerySchema = {
experimentId: {title: '试验ID',order: 0,view: 'text', type: 'string',},
sampleType: {title: '样品类型',order: 1,view: 'text', type: 'string',},
sampleModel: {title: '样品型号',order: 2,view: 'text', type: 'string',},
sampleBatch: {title: '样品批次',order: 3,view: 'text', type: 'string',},
sampleManufacturer: {title: '生产厂家',order: 4,view: 'text', type: 'string',},
sampleImage: {title: '图片',order: 5,view: 'text', type: 'string',},
};
/**
* 流程表单调用这个方法获取formSchema
* @param param
*/
export function getBpmFormSchema(_formData): FormSchema[]{
// 默认和原始表单保持一致 如果流程中配置了权限数据这里需要单独处理formSchema
return formSchema;
}

View File

@@ -0,0 +1,188 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
<!-- 高级查询 -->
<super-query :config="superQueryConfig" @search="handleSuperQuery" />
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template v-slot:bodyCell="{ column, record, index, text }">
</template>
</BasicTable>
<!-- 表单区域 -->
<ExperimentSampleInfoModal @register="registerModal" @success="handleSuccess"></ExperimentSampleInfoModal>
</div>
</template>
<script lang="ts" name="database-experimentSampleInfo" setup>
import {ref, reactive, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import ExperimentSampleInfoModal from './components/ExperimentSampleInfoModal.vue'
import {columns, searchFormSchema, superQuerySchema} from './ExperimentSampleInfo.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './ExperimentSampleInfo.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import { useUserStore } from '/@/store/modules/user';
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
const userStore = useUserStore();
//注册model
const [registerModal, {openModal}] = useModal();
//注册table数据
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '试验样品信息',
api: list,
columns,
canResize:false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToNumber: [
],
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
fixed:'right'
},
beforeFetch: (params) => {
return Object.assign(params, queryParam);
},
},
exportConfig: {
name:"试验样品信息",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
// 高级查询配置
const superQueryConfig = reactive(superQuerySchema);
/**
* 高级查询事件
*/
function handleSuperQuery(params) {
Object.keys(params).map((k) => {
queryParam[k] = params[k];
});
reload();
}
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
placement: 'topLeft',
}
}
]
}
</script>
<style scoped>
:deep(.ant-picker),:deep(.ant-input-number){
width: 100%;
}
</style>

View File

@@ -0,0 +1,64 @@
import {defHttp} from '/@/utils/http/axios';
import { useMessage } from "/@/hooks/web/useMessage";
const { createConfirm } = useMessage();
enum Api {
list = '/database/experimentSequence/list',
save='/database/experimentSequence/add',
edit='/database/experimentSequence/edit',
deleteOne = '/database/experimentSequence/delete',
deleteBatch = '/database/experimentSequence/deleteBatch',
importExcel = '/database/experimentSequence/importExcel',
exportXls = '/database/experimentSequence/exportXls',
}
/**
* 导出api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* 导入api
*/
export const getImportUrl = Api.importExcel;
/**
* 列表接口
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
* 删除单个
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
* 批量删除
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
createConfirm({
iconType: 'warning',
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
* 保存或者更新
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

View File

@@ -0,0 +1,50 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '序列值',
align:"center",
dataIndex: 'sequenceValue'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '序列值',
field: 'sequenceValue',
component: 'Input',
dynamicRules: ({model,schema}) => {
return [
{ required: true, message: '请输入序列值!'},
];
},
},
// TODO 主键隐藏字段目前写死为ID
{
label: '',
field: 'id',
component: 'Input',
show: false
},
];
// 高级查询数据
export const superQuerySchema = {
sequenceValue: {title: '序列值',order: 0,view: 'text', type: 'string',},
};
/**
* 流程表单调用这个方法获取formSchema
* @param param
*/
export function getBpmFormSchema(_formData): FormSchema[]{
// 默认和原始表单保持一致 如果流程中配置了权限数据这里需要单独处理formSchema
return formSchema;
}

View File

@@ -0,0 +1,188 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
<!-- 高级查询 -->
<super-query :config="superQueryConfig" @search="handleSuperQuery" />
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template v-slot:bodyCell="{ column, record, index, text }">
</template>
</BasicTable>
<!-- 表单区域 -->
<ExperimentSequenceModal @register="registerModal" @success="handleSuccess"></ExperimentSequenceModal>
</div>
</template>
<script lang="ts" name="database-experimentSequence" setup>
import {ref, reactive, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import ExperimentSequenceModal from './components/ExperimentSequenceModal.vue'
import {columns, searchFormSchema, superQuerySchema} from './ExperimentSequence.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './ExperimentSequence.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import { useUserStore } from '/@/store/modules/user';
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
const userStore = useUserStore();
//注册model
const [registerModal, {openModal}] = useModal();
//注册table数据
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '试验序列',
api: list,
columns,
canResize:false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToNumber: [
],
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
fixed:'right'
},
beforeFetch: (params) => {
return Object.assign(params, queryParam);
},
},
exportConfig: {
name:"试验序列",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
// 高级查询配置
const superQueryConfig = reactive(superQuerySchema);
/**
* 高级查询事件
*/
function handleSuperQuery(params) {
Object.keys(params).map((k) => {
queryParam[k] = params[k];
});
reload();
}
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: selectedRowKeys.value}, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
placement: 'topLeft',
}
}
]
}
</script>
<style scoped>
:deep(.ant-picker),:deep(.ant-input-number){
width: 100%;
}
</style>

View File

@@ -0,0 +1,26 @@
-- 注意该页面对应的前台目录为views/database文件夹下
-- 如果你想更改到其他目录请修改sql中component字段对应的值
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
VALUES ('202412040408790140', NULL, '试验样品信息', '/database/experimentSampleInfoList', 'database/ExperimentSampleInfoList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0);
-- 权限控制sql
-- 新增
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790141', '202412040408790140', '添加试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);
-- 编辑
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790142', '202412040408790140', '编辑试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);
-- 删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790143', '202412040408790140', '删除试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);
-- 批量删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790144', '202412040408790140', '批量删除试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);
-- 导出excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790145', '202412040408790140', '导出excel_试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);
-- 导入excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('202412040408790146', '202412040408790140', '导入excel_试验样品信息', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sample_info:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:08:14', NULL, NULL, 0, 0, '1', 0);

View File

@@ -0,0 +1,26 @@
-- 注意该页面对应的前台目录为views/database文件夹下
-- 如果你想更改到其他目录请修改sql中component字段对应的值
INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
VALUES ('2024120404071620580', NULL, '试验序列', '/database/experimentSequenceList', 'database/ExperimentSequenceList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0);
-- 权限控制sql
-- 新增
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630581', '2024120404071620580', '添加试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);
-- 编辑
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630582', '2024120404071620580', '编辑试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);
-- 删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630583', '2024120404071620580', '删除试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);
-- 批量删除
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630584', '2024120404071620580', '批量删除试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);
-- 导出excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630585', '2024120404071620580', '导出excel_试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);
-- 导入excel
INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
VALUES ('2024120404071630586', '2024120404071620580', '导入excel_试验序列', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_sequence:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-12-04 16:07:58', NULL, NULL, 0, 0, '1', 0);

View File

@@ -0,0 +1,70 @@
<template>
<div style="min-height: 400px">
<BasicForm @register="registerForm"></BasicForm>
<div style="width: 100%;text-align: center" v-if="!formDisabled">
<a-button @click="submitForm" pre-icon="ant-design:check" type="primary"> </a-button>
</div>
</div>
</template>
<script lang="ts">
import {BasicForm, useForm} from '/@/components/Form/index';
import {computed, defineComponent} from 'vue';
import {defHttp} from '/@/utils/http/axios';
import { propTypes } from '/@/utils/propTypes';
import {getBpmFormSchema} from '../ExperimentSampleInfo.data';
import {saveOrUpdate} from '../ExperimentSampleInfo.api';
export default defineComponent({
name: "ExperimentSampleInfoForm",
components:{
BasicForm
},
props:{
formData: propTypes.object.def({}),
formBpm: propTypes.bool.def(true),
},
setup(props){
const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
labelWidth: 150,
schemas: getBpmFormSchema(props.formData),
showActionButtonGroup: false,
baseColProps: {span: 24}
});
const formDisabled = computed(()=>{
if(props.formData.disabled === false){
return false;
}
return true;
});
let formData = {};
const queryByIdUrl = '/database/experimentSampleInfo/queryById';
async function initFormData(){
let params = {id: props.formData.dataId};
const data = await defHttp.get({url: queryByIdUrl, params});
formData = {...data}
//设置表单的值
await setFieldsValue(formData);
//默认是禁用
await setProps({disabled: formDisabled.value})
}
async function submitForm() {
let data = getFieldsValue();
let params = Object.assign({}, formData, data);
console.log('表单数据', params)
await saveOrUpdate(params, true)
}
initFormData();
return {
registerForm,
formDisabled,
submitForm,
}
}
});
</script>

View File

@@ -0,0 +1,68 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../ExperimentSampleInfo.data';
import {saveOrUpdate} from '../ExperimentSampleInfo.api';
// Emits声明
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
const isDetail = ref(false);
//表单配置
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
//labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
baseColProps: {span: 24}
});
//表单赋值
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//重置表单
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
isDetail.value = !!data?.showFooter;
if (unref(isUpdate)) {
//表单赋值
await setFieldsValue({
...data.record,
});
}
// 隐藏底部时禁用整个表单
setProps({ disabled: !data?.showFooter })
});
//设置标题
const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
//表单提交事件
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//提交表单
await saveOrUpdate(values, isUpdate.value);
//关闭弹窗
closeModal();
//刷新列表
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
/** 时间和数字输入框样式 */
:deep(.ant-input-number) {
width: 100%;
}
:deep(.ant-calendar-picker) {
width: 100%;
}
</style>

View File

@@ -0,0 +1,70 @@
<template>
<div style="min-height: 400px">
<BasicForm @register="registerForm"></BasicForm>
<div style="width: 100%;text-align: center" v-if="!formDisabled">
<a-button @click="submitForm" pre-icon="ant-design:check" type="primary"> </a-button>
</div>
</div>
</template>
<script lang="ts">
import {BasicForm, useForm} from '/@/components/Form/index';
import {computed, defineComponent} from 'vue';
import {defHttp} from '/@/utils/http/axios';
import { propTypes } from '/@/utils/propTypes';
import {getBpmFormSchema} from '../ExperimentSequence.data';
import {saveOrUpdate} from '../ExperimentSequence.api';
export default defineComponent({
name: "ExperimentSequenceForm",
components:{
BasicForm
},
props:{
formData: propTypes.object.def({}),
formBpm: propTypes.bool.def(true),
},
setup(props){
const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
labelWidth: 150,
schemas: getBpmFormSchema(props.formData),
showActionButtonGroup: false,
baseColProps: {span: 24}
});
const formDisabled = computed(()=>{
if(props.formData.disabled === false){
return false;
}
return true;
});
let formData = {};
const queryByIdUrl = '/database/experimentSequence/queryById';
async function initFormData(){
let params = {id: props.formData.dataId};
const data = await defHttp.get({url: queryByIdUrl, params});
formData = {...data}
//设置表单的值
await setFieldsValue(formData);
//默认是禁用
await setProps({disabled: formDisabled.value})
}
async function submitForm() {
let data = getFieldsValue();
let params = Object.assign({}, formData, data);
console.log('表单数据', params)
await saveOrUpdate(params, true)
}
initFormData();
return {
registerForm,
formDisabled,
submitForm,
}
}
});
</script>

View File

@@ -0,0 +1,68 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../ExperimentSequence.data';
import {saveOrUpdate} from '../ExperimentSequence.api';
// Emits声明
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
const isDetail = ref(false);
//表单配置
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
//labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
baseColProps: {span: 24}
});
//表单赋值
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//重置表单
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
isDetail.value = !!data?.showFooter;
if (unref(isUpdate)) {
//表单赋值
await setFieldsValue({
...data.record,
});
}
// 隐藏底部时禁用整个表单
setProps({ disabled: !data?.showFooter })
});
//设置标题
const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
//表单提交事件
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//提交表单
await saveOrUpdate(values, isUpdate.value);
//关闭弹窗
closeModal();
//刷新列表
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
/** 时间和数字输入框样式 */
:deep(.ant-input-number) {
width: 100%;
}
:deep(.ant-calendar-picker) {
width: 100%;
}
</style>