feat: 1.新增物料、物料类型、材料检验统计等表维护功能 2.完善判定依据-判断依据明细 3.新增判断依据、物料管理等字典翻译类 4.成品物料批次-原始数据维护页面
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.common.translation.core.impl; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import lombok.AllArgsConstructor; |
| | | import org.dromara.common.core.service.MatService; |
| | | import org.dromara.common.core.service.UserService; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.translation.annotation.TranslationType; |
| | | import org.dromara.common.translation.constant.TransConstant; |
| | | import org.dromara.common.translation.core.TranslationInterface; |
| | | |
| | | /** |
| | | * matNameç¿»è¯å®ç° |
| | | * |
| | | * @author zhuguifei |
| | | */ |
| | | @AllArgsConstructor |
| | | @TranslationType(type = TransConstant.MAT_CODE_TO_NAME) |
| | | public class MatNameTranslationImpl implements TranslationInterface<String> { |
| | | |
| | | private final MatService matService; |
| | | |
| | | @Override |
| | | public String translation(Object key, String other) { |
| | | if(key == null) return ""; |
| | | return matService.selectMatNameByCode(key.toString()); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.controller; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.*; |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.dromara.common.idempotent.annotation.RepeatSubmit; |
| | | import org.dromara.common.log.annotation.Log; |
| | | import org.dromara.common.web.core.BaseController; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import org.dromara.common.log.enums.BusinessType; |
| | | import org.dromara.common.excel.utils.ExcelUtil; |
| | | import org.dromara.qa.qm.domain.vo.QmMatcheckVo; |
| | | import org.dromara.qa.qm.domain.bo.QmMatcheckBo; |
| | | import org.dromara.qa.qm.service.IQmMatcheckService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/qm/matcheck") |
| | | public class QmMatcheckController extends BaseController { |
| | | |
| | | private final IQmMatcheckService qmMatcheckService; |
| | | |
| | | /** |
| | | * æ¥è¯¢æææ£éªç»è®¡å表 |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<QmMatcheckVo> list(QmMatcheckBo bo, PageQuery pageQuery) { |
| | | return qmMatcheckService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | |
| | | @SaCheckPermission("qm:matcheck:list") |
| | | @GetMapping("/listCheckItem") |
| | | public R<List<Map<String, Object>>> listCheckItem(@RequestParam String judgeId) { |
| | | return R.ok(qmMatcheckService.getQmCheckItem(judgeId)); |
| | | } |
| | | |
| | | /** |
| | | * ææ¹æ¬¡åçå·æ¥è¯¢æææ£éªç»è®¡(å¤è¡¨) |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:list") |
| | | @GetMapping("/listQmMatcheck") |
| | | public TableDataInfo<QmMatcheckVo> listQmMatcheck(QmMatcheckBo bo, PageQuery pageQuery) { |
| | | return TableDataInfo.build(qmMatcheckService.listQmMatcheck(bo), pageQuery.build()); |
| | | } |
| | | |
| | | /** |
| | | * å¯¼åºæææ£éªç»è®¡å表 |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:export") |
| | | @Log(title = "æææ£éªç»è®¡", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(QmMatcheckBo bo, HttpServletResponse response) { |
| | | List<QmMatcheckVo> list = qmMatcheckService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "æææ£éªç»è®¡", QmMatcheckVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åæææ£éªç»è®¡è¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:query") |
| | | @GetMapping("/{id}") |
| | | public R<QmMatcheckVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(qmMatcheckService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æææ£éªç»è®¡ |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:add") |
| | | @Log(title = "æææ£éªç»è®¡", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody QmMatcheckBo bo) { |
| | | return toAjax(qmMatcheckService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æææ£éªç»è®¡ |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:edit") |
| | | @Log(title = "æææ£éªç»è®¡", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody QmMatcheckBo bo) { |
| | | return toAjax(qmMatcheckService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å é¤æææ£éªç»è®¡ |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("qm:matcheck:remove") |
| | | @Log(title = "æææ£éªç»è®¡", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(qmMatcheckService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡å¯¹è±¡ qm_matcheck |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | @Data |
| | | @TableName("qm_matcheck") |
| | | public class QmMatcheck { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "id") |
| | | private String id; |
| | | |
| | | /** |
| | | * æ±æ»è¡¨ID |
| | | */ |
| | | private String pid; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡ |
| | | */ |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * 仪å¨ç¼å· |
| | | */ |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * ææ¯è¦æ± |
| | | */ |
| | | private String techReq; |
| | | |
| | | /** |
| | | * æ£éªä¾æ® |
| | | */ |
| | | private String checkStd; |
| | | |
| | | /** |
| | | * æµè¯ç¯å¢ |
| | | */ |
| | | private String testEnv; |
| | | |
| | | /** |
| | | * æ£éªé¡¹ç®COD |
| | | */ |
| | | private String itemCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String subBatchCode; |
| | | |
| | | /** |
| | | * æ¯çæ£éªæ°é |
| | | */ |
| | | private Long sampleNumber; |
| | | |
| | | /** |
| | | * åæ ·ç±»å |
| | | */ |
| | | private Long sampleType; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | private String checkName; |
| | | |
| | | /** |
| | | * æ£éªæ¶é´ |
| | | */ |
| | | private Date checkTime; |
| | | |
| | | /** |
| | | * 夿 ¸å |
| | | */ |
| | | private String reviewName; |
| | | |
| | | /** |
| | | * 夿 ¸æ¶é´ |
| | | */ |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * æå¤§å¼ |
| | | */ |
| | | private Double maxval; |
| | | |
| | | /** |
| | | * æå°å¼ |
| | | */ |
| | | private Double minval; |
| | | |
| | | /** |
| | | * å¹³åå¼ |
| | | */ |
| | | private Double avgval; |
| | | |
| | | /** |
| | | * SDå¼ |
| | | */ |
| | | private Double sdval; |
| | | |
| | | /** |
| | | * CVå¼ |
| | | */ |
| | | private Double cvval; |
| | | |
| | | /** |
| | | * CPKå¼ |
| | | */ |
| | | private Double cpkval; |
| | | |
| | | /** |
| | | * è¶
æ æ° |
| | | */ |
| | | private Double badval; |
| | | |
| | | /** |
| | | * å¤å® |
| | | */ |
| | | private String judge; |
| | | |
| | | /** |
| | | * å项å¤å® |
| | | */ |
| | | private String singlejudge; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | private String archDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | private Long del; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes 1-å·²ä¸ä¼ |
| | | */ |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ mesæ¶é´ |
| | | */ |
| | | private Date toMesTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String chkDes; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.bo; |
| | | |
| | | import org.dromara.qa.qm.domain.QmMatcheck; |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡ä¸å¡å¯¹è±¡ qm_matcheck |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = QmMatcheck.class, reverseConvertGenerate = false) |
| | | public class QmMatcheckBo extends BaseEntity { |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * æ±æ»è¡¨ID |
| | | */ |
| | | private String pid; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡ |
| | | */ |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * 仪å¨ç¼å· |
| | | */ |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * ææ¯è¦æ± |
| | | */ |
| | | private String techReq; |
| | | |
| | | /** |
| | | * æ£éªä¾æ® |
| | | */ |
| | | private String checkStd; |
| | | |
| | | /** |
| | | * æµè¯ç¯å¢ |
| | | */ |
| | | private String testEnv; |
| | | |
| | | /** |
| | | * æ£éªé¡¹ç®COD |
| | | */ |
| | | private String itemCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | private String subBatchCode; |
| | | |
| | | /** |
| | | * æ¯çæ£éªæ°é |
| | | */ |
| | | private Long sampleNumber; |
| | | |
| | | /** |
| | | * åæ ·ç±»å |
| | | */ |
| | | private Long sampleType; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | private String checkName; |
| | | |
| | | /** |
| | | * æ£éªæ¶é´ |
| | | */ |
| | | private Date checkTime; |
| | | |
| | | /** |
| | | * 夿 ¸å |
| | | */ |
| | | private String reviewName; |
| | | |
| | | /** |
| | | * 夿 ¸æ¶é´ |
| | | */ |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * æå¤§å¼ |
| | | */ |
| | | private Double maxval; |
| | | |
| | | /** |
| | | * æå°å¼ |
| | | */ |
| | | private Double minval; |
| | | |
| | | /** |
| | | * å¹³åå¼ |
| | | */ |
| | | private Double avgval; |
| | | |
| | | /** |
| | | * SDå¼ |
| | | */ |
| | | private Double sdval; |
| | | |
| | | /** |
| | | * CVå¼ |
| | | */ |
| | | private Double cvval; |
| | | |
| | | /** |
| | | * CPKå¼ |
| | | */ |
| | | private Double cpkval; |
| | | |
| | | /** |
| | | * è¶
æ æ° |
| | | */ |
| | | private Double badval; |
| | | |
| | | /** |
| | | * å¤å® |
| | | */ |
| | | private String judge; |
| | | |
| | | /** |
| | | * å项å¤å® |
| | | */ |
| | | private String singlejudge; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | private String archDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | private Long del; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes 1-å·²ä¸ä¼ |
| | | */ |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ mesæ¶é´ |
| | | */ |
| | | private Date toMesTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String chkDes; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.qa.qm.domain.QmMatcheck; |
| | | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| | | import cn.idev.excel.annotation.ExcelProperty; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡è§å¾å¯¹è±¡ qm_matcheck |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = QmMatcheck.class) |
| | | public class QmMatcheckVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @ExcelProperty(value = "id") |
| | | private String id; |
| | | |
| | | /** |
| | | * æ±æ»è¡¨ID |
| | | */ |
| | | @ExcelProperty(value = "æ±æ»è¡¨ID") |
| | | private String pid; |
| | | |
| | | /** |
| | | * æ£éªæ¹æ¬¡ |
| | | */ |
| | | @ExcelProperty(value = "æ£éªæ¹æ¬¡") |
| | | private String batchCode; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | @ExcelProperty(value = "çå·") |
| | | private String matCode; |
| | | |
| | | /** |
| | | * 仪å¨ç¼å· |
| | | */ |
| | | @ExcelProperty(value = "仪å¨ç¼å·") |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * ææ¯è¦æ± |
| | | */ |
| | | @ExcelProperty(value = "ææ¯è¦æ±") |
| | | private String techReq; |
| | | |
| | | /** |
| | | * æ£éªä¾æ® |
| | | */ |
| | | @ExcelProperty(value = "æ£éªä¾æ®") |
| | | private String checkStd; |
| | | |
| | | /** |
| | | * æµè¯ç¯å¢ |
| | | */ |
| | | @ExcelProperty(value = "æµè¯ç¯å¢") |
| | | private String testEnv; |
| | | |
| | | /** |
| | | * æ£éªé¡¹ç®COD |
| | | */ |
| | | @ExcelProperty(value = "æ£éªé¡¹ç®COD") |
| | | private String itemCode; |
| | | |
| | | /** |
| | | * æ£éªé¡¹ç®åç§° |
| | | */ |
| | | private String itemName; |
| | | |
| | | /** |
| | | * è®¾å¤ |
| | | */ |
| | | private String eqp; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | @ExcelProperty(value = "çå·") |
| | | private String subBatchCode; |
| | | |
| | | /** |
| | | * æ¯çæ£éªæ°é |
| | | */ |
| | | @ExcelProperty(value = "æ¯çæ£éªæ°é") |
| | | private Long sampleNumber; |
| | | |
| | | /** |
| | | * åæ ·ç±»å |
| | | */ |
| | | @ExcelProperty(value = "åæ ·ç±»å") |
| | | private Long sampleType; |
| | | |
| | | /** |
| | | * æ£éªå |
| | | */ |
| | | @ExcelProperty(value = "æ£éªå") |
| | | private String checkName; |
| | | |
| | | /** |
| | | * æ£éªæ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "æ£éªæ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date checkTime; |
| | | |
| | | /** |
| | | * 夿 ¸å |
| | | */ |
| | | @ExcelProperty(value = "夿 ¸å") |
| | | private String reviewName; |
| | | |
| | | /** |
| | | * 夿 ¸æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "夿 ¸æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date reviewTime; |
| | | |
| | | /** |
| | | * æå¤§å¼ |
| | | */ |
| | | @ExcelProperty(value = "æå¤§å¼") |
| | | private Double maxval; |
| | | |
| | | /** |
| | | * æå°å¼ |
| | | */ |
| | | @ExcelProperty(value = "æå°å¼") |
| | | private Double minval; |
| | | |
| | | /** |
| | | * å¹³åå¼ |
| | | */ |
| | | @ExcelProperty(value = "å¹³åå¼") |
| | | private Double avgval; |
| | | |
| | | /** |
| | | * SDå¼ |
| | | */ |
| | | @ExcelProperty(value = "SDå¼") |
| | | private Double sdval; |
| | | |
| | | /** |
| | | * CVå¼ |
| | | */ |
| | | @ExcelProperty(value = "CVå¼") |
| | | private Double cvval; |
| | | |
| | | /** |
| | | * CPKå¼ |
| | | */ |
| | | @ExcelProperty(value = "CPKå¼") |
| | | private Double cpkval; |
| | | |
| | | /** |
| | | * è¶
æ æ° |
| | | */ |
| | | @ExcelProperty(value = "è¶
æ æ°") |
| | | private Double badval; |
| | | |
| | | /** |
| | | * å¤å® |
| | | */ |
| | | @ExcelProperty(value = "å¤å®") |
| | | private String judge; |
| | | |
| | | /** |
| | | * å项å¤å® |
| | | */ |
| | | @ExcelProperty(value = "å项å¤å®") |
| | | private String singlejudge; |
| | | |
| | | /** |
| | | * çæ¬åç§° |
| | | */ |
| | | @ExcelProperty(value = "çæ¬åç§°") |
| | | private String verName; |
| | | |
| | | /** |
| | | * çæ¬ç¼å· |
| | | */ |
| | | @ExcelProperty(value = "çæ¬ç¼å·") |
| | | private String verCode; |
| | | |
| | | /** |
| | | * ä¿åæ |
| | | */ |
| | | @ExcelProperty(value = "ä¿åæ") |
| | | private String archDate; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | @ExcelProperty(value = "å 餿 å¿") |
| | | private Long del; |
| | | |
| | | /** |
| | | * 0-æªä¸ä¼ mes 1-å·²ä¸ä¼ |
| | | */ |
| | | @ExcelProperty(value = "0-æªä¸ä¼ mes 1-å·²ä¸ä¼ ") |
| | | private String flag; |
| | | |
| | | /** |
| | | * ä¸ä¼ mesæ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "ä¸ä¼ mesæ¶é´") |
| | | private Date toMesTime; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ExcelProperty(value = "夿³¨") |
| | | private String chkDes; |
| | | |
| | | /** |
| | | * æ£éªäººå±ç¤ºå |
| | | */ |
| | | private String checker; |
| | | |
| | | /** |
| | | * å¤å®è§ç¨code(éæ°æ®åºå段) |
| | | */ |
| | | private String judgeCode; |
| | | |
| | | /** |
| | | * æ¯å¦çæ30æ¯çæç»(éæ°æ®åºå段) |
| | | */ |
| | | private String generateDetails; |
| | | |
| | | /** |
| | | * æ£æµç±»å(éæ°æ®åºå段) |
| | | */ |
| | | private String checkType; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.mapper; |
| | | |
| | | import org.apache.ibatis.annotations.Result; |
| | | import org.apache.ibatis.annotations.Results; |
| | | import org.dromara.qa.qm.domain.bo.QmMatcheckBo; |
| | | import org.dromara.qa.qm.domain.QmMatcheck; |
| | | import org.dromara.qa.qm.domain.vo.QmMatcheckVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.apache.ibatis.annotations.Select; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡Mapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | public interface QmMatcheckMapper extends BaseMapperPlus<QmMatcheck, QmMatcheckVo> { |
| | | @Results(id = "qmCheckItemMap", value = { |
| | | @Result(property = "itemCode", column = "item_code"), |
| | | @Result(property = "itemName", column = "item_name") |
| | | }) |
| | | @Select("SELECT b.item_code, a.item_name FROM QM_JUDGE_DETAILS a " + |
| | | "JOIN QM_CHECKITEM b ON a.item_cod = b.id " + |
| | | "WHERE a.judge_id = #{judgeId} AND a.rid IS NULL AND a.category IN (0)") |
| | | List<Map<String, Object>> getQmCheckItem(@Param("judgeId") String judgeId); |
| | | |
| | | /** |
| | | * ææ¹æ¬¡åçå·æ¥è¯¢æææ£éªç»è®¡(å¤è¡¨) |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æææ£éªç»è®¡å表 |
| | | */ |
| | | List<QmMatcheckVo> listQmMatcheck(@Param("bo") QmMatcheckBo bo); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.service; |
| | | |
| | | import org.dromara.qa.qm.domain.vo.QmMatcheckVo; |
| | | import org.dromara.qa.qm.domain.bo.QmMatcheckBo; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡Serviceæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | public interface IQmMatcheckService { |
| | | |
| | | /** |
| | | * æ¥è¯¢æææ£éªç»è®¡ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æææ£éªç»è®¡ |
| | | */ |
| | | QmMatcheckVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æææ£éªç»è®¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æææ£éªç»è®¡å页å表 |
| | | */ |
| | | TableDataInfo<QmMatcheckVo> queryPageList(QmMatcheckBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæææ£éªç»è®¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æææ£éªç»è®¡å表 |
| | | */ |
| | | List<QmMatcheckVo> queryList(QmMatcheckBo bo); |
| | | |
| | | /** |
| | | * æ°å¢æææ£éªç»è®¡ |
| | | * |
| | | * @param bo æææ£éªç»è®¡ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(QmMatcheckBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹æææ£éªç»è®¡ |
| | | * |
| | | * @param bo æææ£éªç»è®¡ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(QmMatcheckBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤æææ£éªç»è®¡ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | |
| | | /** |
| | | * è·åæ£éªé¡¹ç® |
| | | * |
| | | * @param judgeId å¤å®ID |
| | | * @return æ£éªé¡¹ç®å表 |
| | | */ |
| | | List<Map<String, Object>> getQmCheckItem(String judgeId); |
| | | |
| | | /** |
| | | * ææ¹æ¬¡åçå·æ¥è¯¢æææ£éªç»è®¡(å¤è¡¨) |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æææ£éªç»è®¡å表 |
| | | */ |
| | | List<QmMatcheckVo> listQmMatcheck(QmMatcheckBo bo); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.service.impl; |
| | | |
| | | import org.dromara.common.core.utils.MapstructUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.qa.qm.domain.bo.QmMatcheckBo; |
| | | import org.dromara.qa.qm.domain.vo.QmMatcheckVo; |
| | | import org.dromara.qa.qm.domain.QmMatcheck; |
| | | import org.dromara.qa.qm.mapper.QmMatcheckMapper; |
| | | import org.dromara.qa.qm.service.IQmMatcheckService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * æææ£éªç»è®¡Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-15 |
| | | */ |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class QmMatcheckServiceImpl implements IQmMatcheckService { |
| | | |
| | | private final QmMatcheckMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢æææ£éªç»è®¡ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æææ£éªç»è®¡ |
| | | */ |
| | | @Override |
| | | public QmMatcheckVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æææ£éªç»è®¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æææ£éªç»è®¡å页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<QmMatcheckVo> queryPageList(QmMatcheckBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<QmMatcheck> lqw = buildQueryWrapper(bo); |
| | | Page<QmMatcheckVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæææ£éªç»è®¡å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æææ£éªç»è®¡å表 |
| | | */ |
| | | @Override |
| | | public List<QmMatcheckVo> queryList(QmMatcheckBo bo) { |
| | | LambdaQueryWrapper<QmMatcheck> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<QmMatcheck> buildQueryWrapper(QmMatcheckBo bo) { |
| | | LambdaQueryWrapper<QmMatcheck> lqw = Wrappers.lambdaQuery(); |
| | | lqw.like(StringUtils.isNotBlank(bo.getBatchCode()), QmMatcheck::getBatchCode, bo.getBatchCode()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getMatCode()), QmMatcheck::getMatCode, bo.getMatCode()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getCheckName()), QmMatcheck::getCheckName, bo.getCheckName()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æææ£éªç»è®¡ |
| | | * |
| | | * @param bo æææ£éªç»è®¡ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(QmMatcheckBo bo) { |
| | | QmMatcheck add = MapstructUtils.convert(bo, QmMatcheck.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æææ£éªç»è®¡ |
| | | * |
| | | * @param bo æææ£éªç»è®¡ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(QmMatcheckBo bo) { |
| | | QmMatcheck update = MapstructUtils.convert(bo, QmMatcheck.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(QmMatcheck entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤æææ£éªç»è®¡ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ£éªé¡¹ç® |
| | | * |
| | | * @param judgeId å¤å®ID |
| | | * @return æ£éªé¡¹ç®å表 |
| | | */ |
| | | @Override |
| | | public List<Map<String, Object>> getQmCheckItem(String judgeId) { |
| | | return baseMapper.getQmCheckItem(judgeId); |
| | | } |
| | | |
| | | /** |
| | | * ææ¹æ¬¡åçå·æ¥è¯¢æææ£éªç»è®¡(å¤è¡¨) |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æææ£éªç»è®¡å表 |
| | | */ |
| | | @Override |
| | | public List<QmMatcheckVo> listQmMatcheck(QmMatcheckBo bo) { |
| | | return baseMapper.listQmMatcheck(bo); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.controller; |
| | | |
| | | import java.util.List; |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.*; |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.dromara.common.idempotent.annotation.RepeatSubmit; |
| | | import org.dromara.common.log.annotation.Log; |
| | | import org.dromara.common.web.core.BaseController; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import org.dromara.common.log.enums.BusinessType; |
| | | import org.dromara.common.excel.utils.ExcelUtil; |
| | | import org.dromara.sc.md.domain.vo.MdMatVo; |
| | | import org.dromara.sc.md.domain.bo.MdMatBo; |
| | | import org.dromara.sc.md.service.IMdMatService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * ç©æ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/md/mat") |
| | | public class MdMatController extends BaseController { |
| | | |
| | | private final IMdMatService mdMatService; |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æå表 |
| | | */ |
| | | @SaCheckPermission("md:mat:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<MdMatVo> list(MdMatBo bo, PageQuery pageQuery) { |
| | | return mdMatService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * 导åºç©æå表 |
| | | */ |
| | | @SaCheckPermission("md:mat:export") |
| | | @Log(title = "ç©æ", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(MdMatBo bo, HttpServletResponse response) { |
| | | List<MdMatVo> list = mdMatService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "ç©æ", MdMatVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åç©æè¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("md:mat:query") |
| | | @GetMapping("/{id}") |
| | | public R<MdMatVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(mdMatService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ç©æ |
| | | */ |
| | | @SaCheckPermission("md:mat:add") |
| | | @Log(title = "ç©æ", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody MdMatBo bo) { |
| | | return toAjax(mdMatService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æ |
| | | */ |
| | | @SaCheckPermission("md:mat:edit") |
| | | @Log(title = "ç©æ", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody MdMatBo bo) { |
| | | return toAjax(mdMatService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç©æ |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("md:mat:remove") |
| | | @Log(title = "ç©æ", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(mdMatService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.controller; |
| | | |
| | | import java.util.List; |
| | | |
| | | import lombok.RequiredArgsConstructor; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.*; |
| | | import cn.dev33.satoken.annotation.SaCheckPermission; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.dromara.common.idempotent.annotation.RepeatSubmit; |
| | | import org.dromara.common.log.annotation.Log; |
| | | import org.dromara.common.web.core.BaseController; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import org.dromara.common.core.domain.R; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import org.dromara.common.log.enums.BusinessType; |
| | | import org.dromara.common.excel.utils.ExcelUtil; |
| | | import org.dromara.sc.md.domain.vo.MdMatTypeVo; |
| | | import org.dromara.sc.md.domain.bo.MdMatTypeBo; |
| | | import org.dromara.sc.md.service.IMdMatTypeService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/md/matType") |
| | | public class MdMatTypeController extends BaseController { |
| | | |
| | | private final IMdMatTypeService mdMatTypeService; |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æç±»åå表 |
| | | */ |
| | | @SaCheckPermission("md:matType:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<MdMatTypeVo> list(MdMatTypeBo bo, PageQuery pageQuery) { |
| | | return mdMatTypeService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * 导åºç©æç±»åå表 |
| | | */ |
| | | @SaCheckPermission("md:matType:export") |
| | | @Log(title = "ç©æç±»å", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(MdMatTypeBo bo, HttpServletResponse response) { |
| | | List<MdMatTypeVo> list = mdMatTypeService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "ç©æç±»å", MdMatTypeVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åç©æç±»å详ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("md:matType:query") |
| | | @GetMapping("/{id}") |
| | | public R<MdMatTypeVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(mdMatTypeService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ç©æç±»å |
| | | */ |
| | | @SaCheckPermission("md:matType:add") |
| | | @Log(title = "ç©æç±»å", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody MdMatTypeBo bo) { |
| | | return toAjax(mdMatTypeService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æç±»å |
| | | */ |
| | | @SaCheckPermission("md:matType:edit") |
| | | @Log(title = "ç©æç±»å", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody MdMatTypeBo bo) { |
| | | return toAjax(mdMatTypeService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç©æç±»å |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("md:matType:remove") |
| | | @Log(title = "ç©æç±»å", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(mdMatTypeService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain; |
| | | |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | import java.io.Serial; |
| | | |
| | | /** |
| | | * ç©æå¯¹è±¡ MD_MAT |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @TableName("MD_MAT") |
| | | public class MdMat { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "ID") |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æä»£ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * å
¨ç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * ç®ç§° |
| | | */ |
| | | private String simpleName; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * åä½ |
| | | */ |
| | | private String uid; |
| | | |
| | | /** |
| | | * æåæ´æ°æ¶é´ |
| | | */ |
| | | private Date lastUpdateTime; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private String del; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | private String tid; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain; |
| | | |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | import java.io.Serial; |
| | | |
| | | /** |
| | | * ç©æç±»å对象 MD_MAT_TYPE |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @TableName("MD_MAT_TYPE") |
| | | public class MdMatType { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @TableId(value = "ID") |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æç»å¤é® |
| | | */ |
| | | private String gid; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private String del; |
| | | |
| | | /** |
| | | * mesç¼ç |
| | | */ |
| | | private String mesCode; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain.bo; |
| | | |
| | | import org.dromara.sc.md.domain.MdMat; |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import jakarta.validation.constraints.*; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | /** |
| | | * ç©æä¸å¡å¯¹è±¡ MD_MAT |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = MdMat.class, reverseConvertGenerate = false) |
| | | public class MdMatBo extends BaseEntity { |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @NotBlank(message = "idä¸è½ä¸ºç©º", groups = { EditGroup.class }) |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æä»£ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * å
¨ç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * ç®ç§° |
| | | */ |
| | | private String simpleName; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * åä½ |
| | | */ |
| | | private String uid; |
| | | |
| | | /** |
| | | * æåæ´æ°æ¶é´ |
| | | */ |
| | | private Date lastUpdateTime; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private String del; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | private String tid; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain.bo; |
| | | |
| | | import org.dromara.sc.md.domain.MdMatType; |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import org.dromara.common.core.validate.AddGroup; |
| | | import org.dromara.common.core.validate.EditGroup; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import jakarta.validation.constraints.*; |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | /** |
| | | * ç©æç±»åä¸å¡å¯¹è±¡ MD_MAT_TYPE |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = MdMatType.class, reverseConvertGenerate = false) |
| | | public class MdMatTypeBo extends BaseEntity { |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @NotBlank(message = "idä¸è½ä¸ºç©º", groups = { EditGroup.class }) |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æç»å¤é® |
| | | */ |
| | | private String gid; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private String del; |
| | | |
| | | /** |
| | | * mesç¼ç |
| | | */ |
| | | private String mesCode; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain.vo; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.sc.md.domain.MdMatType; |
| | | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| | | import cn.idev.excel.annotation.ExcelProperty; |
| | | import org.dromara.common.excel.annotation.ExcelDictFormat; |
| | | import org.dromara.common.excel.convert.ExcelDictConvert; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | |
| | | |
| | | /** |
| | | * ç©æç±»åè§å¾å¯¹è±¡ MD_MAT_TYPE |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = MdMatType.class) |
| | | public class MdMatTypeVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @ExcelProperty(value = "id") |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æç»å¤é® |
| | | */ |
| | | @ExcelProperty(value = "ç©æç»å¤é®") |
| | | private String gid; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @ExcelProperty(value = "ç¼ç ") |
| | | private String code; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ExcelProperty(value = "åç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | @ExcelProperty(value = "æè¿°") |
| | | private String des; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | @ExcelProperty(value = "å¯ç¨") |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | @ExcelProperty(value = "å é¤") |
| | | private String del; |
| | | |
| | | /** |
| | | * mesç¼ç |
| | | */ |
| | | @ExcelProperty(value = "mesç¼ç ") |
| | | private String mesCode; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | @ExcelProperty(value = "å建人") |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "å建æ¶é´") |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | @ExcelProperty(value = "æ´æ°äºº") |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "æ´æ°æ¶é´") |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.domain.vo; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.sc.md.domain.MdMat; |
| | | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| | | import cn.idev.excel.annotation.ExcelProperty; |
| | | import org.dromara.common.excel.annotation.ExcelDictFormat; |
| | | import org.dromara.common.excel.convert.ExcelDictConvert; |
| | | import io.github.linpeilie.annotations.AutoMapper; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serial; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | |
| | | |
| | | /** |
| | | * ç©æè§å¾å¯¹è±¡ MD_MAT |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = MdMat.class) |
| | | public class MdMatVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | @ExcelProperty(value = "id") |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æä»£ç |
| | | */ |
| | | @ExcelProperty(value = "ç©æä»£ç ") |
| | | private String code; |
| | | |
| | | /** |
| | | * å
¨ç§° |
| | | */ |
| | | @ExcelProperty(value = "å
¨ç§°") |
| | | private String name; |
| | | |
| | | /** |
| | | * ç®ç§° |
| | | */ |
| | | @ExcelProperty(value = "ç®ç§°") |
| | | private String simpleName; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | @ExcelProperty(value = "æè¿°") |
| | | private String des; |
| | | |
| | | /** |
| | | * åä½ |
| | | */ |
| | | @ExcelProperty(value = "åä½") |
| | | private String uid; |
| | | |
| | | /** |
| | | * æåæ´æ°æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "æåæ´æ°æ¶é´") |
| | | private Date lastUpdateTime; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | @ExcelProperty(value = "å¯ç¨") |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | @ExcelProperty(value = "å é¤") |
| | | private String del; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | @ExcelProperty(value = "ç©æç±»å") |
| | | private String tid; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | @ExcelProperty(value = "å建人") |
| | | private String createUserName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "å建æ¶é´") |
| | | private Date createUserTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | @ExcelProperty(value = "æ´æ°äºº") |
| | | private String updateUserName; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "æ´æ°æ¶é´") |
| | | private Date updateUserTime; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.mapper; |
| | | |
| | | import org.dromara.sc.md.domain.MdMat; |
| | | import org.dromara.sc.md.domain.vo.MdMatVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * ç©æMapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | public interface MdMatMapper extends BaseMapperPlus<MdMat, MdMatVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.mapper; |
| | | |
| | | import org.dromara.sc.md.domain.MdMatType; |
| | | import org.dromara.sc.md.domain.vo.MdMatTypeVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * ç©æç±»åMapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | public interface MdMatTypeMapper extends BaseMapperPlus<MdMatType, MdMatTypeVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.service; |
| | | |
| | | import org.dromara.sc.md.domain.vo.MdMatVo; |
| | | import org.dromara.sc.md.domain.bo.MdMatBo; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ç©æServiceæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | public interface IMdMatService { |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return ç©æ |
| | | */ |
| | | MdMatVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ç©æå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return ç©æå页å表 |
| | | */ |
| | | TableDataInfo<MdMatVo> queryPageList(MdMatBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çç©æå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return ç©æå表 |
| | | */ |
| | | List<MdMatVo> queryList(MdMatBo bo); |
| | | |
| | | /** |
| | | * æ°å¢ç©æ |
| | | * |
| | | * @param bo ç©æ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(MdMatBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æ |
| | | * |
| | | * @param bo ç©æ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(MdMatBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤ç©æä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.service; |
| | | |
| | | import org.dromara.sc.md.domain.vo.MdMatTypeVo; |
| | | import org.dromara.sc.md.domain.bo.MdMatTypeBo; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ç©æç±»åServiceæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | public interface IMdMatTypeService { |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æç±»å |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return ç©æç±»å |
| | | */ |
| | | MdMatTypeVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ç©æç±»åå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return ç©æç±»åå页å表 |
| | | */ |
| | | TableDataInfo<MdMatTypeVo> queryPageList(MdMatTypeBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çç©æç±»åå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return ç©æç±»åå表 |
| | | */ |
| | | List<MdMatTypeVo> queryList(MdMatTypeBo bo); |
| | | |
| | | /** |
| | | * æ°å¢ç©æç±»å |
| | | * |
| | | * @param bo ç©æç±»å |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(MdMatTypeBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æç±»å |
| | | * |
| | | * @param bo ç©æç±»å |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(MdMatTypeBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤ç©æç±»åä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.service.impl; |
| | | |
| | | import com.baomidou.dynamic.datasource.annotation.DS; |
| | | import org.dromara.common.core.service.MatService; |
| | | import org.dromara.common.core.utils.MapstructUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.sc.md.domain.bo.MdMatBo; |
| | | import org.dromara.sc.md.domain.vo.MdMatVo; |
| | | import org.dromara.sc.md.domain.MdMat; |
| | | import org.dromara.sc.md.mapper.MdMatMapper; |
| | | import org.dromara.sc.md.service.IMdMatService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * ç©æServiceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @DS("oracle_sc") |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class MdMatServiceImpl implements IMdMatService, MatService { |
| | | |
| | | private final MdMatMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return ç©æ |
| | | */ |
| | | @Override |
| | | public MdMatVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ç©æå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return ç©æå页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<MdMatVo> queryPageList(MdMatBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<MdMat> lqw = buildQueryWrapper(bo); |
| | | Page<MdMatVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çç©æå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return ç©æå表 |
| | | */ |
| | | @Override |
| | | public List<MdMatVo> queryList(MdMatBo bo) { |
| | | LambdaQueryWrapper<MdMat> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<MdMat> buildQueryWrapper(MdMatBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<MdMat> lqw = Wrappers.lambdaQuery(); |
| | | lqw.orderByAsc(MdMat::getId); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getCode()), MdMat::getCode, bo.getCode()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getName()), MdMat::getName, bo.getName()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getSimpleName()), MdMat::getSimpleName, bo.getSimpleName()); |
| | | lqw.eq(bo.getEnable() != null, MdMat::getEnable, bo.getEnable()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getTid()), MdMat::getTid, bo.getTid()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ç©æ |
| | | * |
| | | * @param bo ç©æ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(MdMatBo bo) { |
| | | MdMat add = MapstructUtils.convert(bo, MdMat.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æ |
| | | * |
| | | * @param bo ç©æ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(MdMatBo bo) { |
| | | MdMat update = MapstructUtils.convert(bo, MdMat.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(MdMat entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤ç©æä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | |
| | | @Override |
| | | public String selectMatNameByCode(String matCode) { |
| | | LambdaQueryWrapper<MdMat> lqw = Wrappers.lambdaQuery(); |
| | | lqw.eq(MdMat::getCode,matCode); |
| | | MdMatVo mdMatVo = baseMapper.selectVoOne(lqw); |
| | | return mdMatVo.getName(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.sc.md.service.impl; |
| | | |
| | | import com.baomidou.dynamic.datasource.annotation.DS; |
| | | import org.dromara.common.core.utils.MapstructUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | import org.dromara.common.mybatis.core.page.PageQuery; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.sc.md.domain.bo.MdMatTypeBo; |
| | | import org.dromara.sc.md.domain.vo.MdMatTypeVo; |
| | | import org.dromara.sc.md.domain.MdMatType; |
| | | import org.dromara.sc.md.mapper.MdMatTypeMapper; |
| | | import org.dromara.sc.md.service.IMdMatTypeService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * ç©æç±»åServiceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-04-13 |
| | | */ |
| | | @DS("oracle_sc") |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class MdMatTypeServiceImpl implements IMdMatTypeService { |
| | | |
| | | private final MdMatTypeMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢ç©æç±»å |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return ç©æç±»å |
| | | */ |
| | | @Override |
| | | public MdMatTypeVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ç©æç±»åå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return ç©æç±»åå页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<MdMatTypeVo> queryPageList(MdMatTypeBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<MdMatType> lqw = buildQueryWrapper(bo); |
| | | Page<MdMatTypeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çç©æç±»åå表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return ç©æç±»åå表 |
| | | */ |
| | | @Override |
| | | public List<MdMatTypeVo> queryList(MdMatTypeBo bo) { |
| | | LambdaQueryWrapper<MdMatType> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<MdMatType> buildQueryWrapper(MdMatTypeBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<MdMatType> lqw = Wrappers.lambdaQuery(); |
| | | lqw.orderByAsc(MdMatType::getId); |
| | | lqw.like(StringUtils.isNotBlank(bo.getCode()), MdMatType::getCode, bo.getCode()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getName()), MdMatType::getName, bo.getName()); |
| | | lqw.eq(bo.getEnable() != null, MdMatType::getEnable, bo.getEnable()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getDel()), MdMatType::getDel, bo.getDel()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getMesCode()), MdMatType::getMesCode, bo.getMesCode()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ç©æç±»å |
| | | * |
| | | * @param bo ç©æç±»å |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(MdMatTypeBo bo) { |
| | | MdMatType add = MapstructUtils.convert(bo, MdMatType.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹ç©æç±»å |
| | | * |
| | | * @param bo ç©æç±»å |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(MdMatTypeBo bo) { |
| | | MdMatType update = MapstructUtils.convert(bo, MdMatType.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(MdMatType entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤ç©æç±»åä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" ?> |
| | | <!DOCTYPE mapper |
| | | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| | | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="org.dromara.qa.qm.mapper.QmMatcheckMapper"> |
| | | |
| | | <select id="listQmMatcheck" resultType="org.dromara.qa.qm.domain.vo.QmMatcheckVo"> |
| | | SELECT |
| | | a.ID AS id, |
| | | a.PID AS pid, |
| | | a.BATCH_CODE AS batchCode, |
| | | a.MAT_CODE AS matCode, |
| | | a.INSTRUMENT_CODE AS instrumentCode, |
| | | a.TECH_REQ AS techReq, |
| | | a.CHECK_STD AS checkStd, |
| | | a.TEST_ENV AS testEnv, |
| | | a.ITEM_CODE AS itemCode, |
| | | d.ITEM_NAME AS itemName, |
| | | CAST(NULL AS VARCHAR(100)) AS eqp, |
| | | a.SUB_BATCH_CODE AS subBatchCode, |
| | | a.SAMPLE_NUMBER AS sampleNumber, |
| | | a.SAMPLE_TYPE AS sampleType, |
| | | a.CHECK_NAME AS checkName, |
| | | a.CHECK_TIME AS checkTime, |
| | | a.REVIEW_NAME AS reviewName, |
| | | a.REVIEW_TIME AS reviewTime, |
| | | a.MAXVAL AS maxval, |
| | | a.MINVAL AS minval, |
| | | a.AVGVAL AS avgval, |
| | | a.SDVAL AS sdval, |
| | | a.CVVAL AS cvval, |
| | | a.CPKVAL AS cpkval, |
| | | a.BADVAL AS badval, |
| | | a.JUDGE AS judge, |
| | | a.SINGLEJUDGE AS singlejudge, |
| | | a.VER_NAME AS verName, |
| | | a.VER_CODE AS verCode, |
| | | a.ARCH_DATE AS archDate, |
| | | a.DEL AS del, |
| | | a.FLAG AS flag, |
| | | a.TO_MES_TIME AS toMesTime, |
| | | a.CHK_DES AS chkDes, |
| | | CAST(NULL AS VARCHAR(200)) AS checker, |
| | | b.JUDGE_CODE AS judgeCode, |
| | | CAST(NULL AS VARCHAR(10)) AS generateDetails, |
| | | CAST(NULL AS VARCHAR(10)) AS checkType |
| | | FROM QM_MATCHECK a |
| | | JOIN QM_BATCH b ON b.BATCH_CODE = a.BATCH_CODE |
| | | AND b.MAT_CODE = a.MAT_CODE |
| | | JOIN QM_JUDGE c ON b.JUDGE_CODE = c.ID |
| | | JOIN QM_CHECKITEM d ON d.STD_CODE = c.STD_COD |
| | | AND d.ITEM_CODE = a.ITEM_CODE |
| | | AND d.RID IS NULL |
| | | AND d.DEL != 1 |
| | | <where> |
| | | <if test="bo.batchCode != null and bo.batchCode != ''"> |
| | | AND a.BATCH_CODE = #{bo.batchCode} |
| | | </if> |
| | | <if test="bo.matCode != null and bo.matCode != ''"> |
| | | AND a.MAT_CODE = #{bo.matCode} |
| | | </if> |
| | | AND (a.DEL = 0 OR a.DEL IS NULL) |
| | | AND b.DELETED != '1' |
| | | </where> |
| | | ORDER BY a.ITEM_CODE, a.SUB_BATCH_CODE |
| | | </select> |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" ?> |
| | | <!DOCTYPE mapper |
| | | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| | | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="org.dromara.sc.md.mapper.MdMatMapper"> |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8" ?> |
| | | <!DOCTYPE mapper |
| | | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| | | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="org.dromara.sc.md.mapper.MdMatTypeMapper"> |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åç©æç±»åå表 */ |
| | | export function fetchGetMatTypeList (params?: Api.Md.MatTypeSearchParams) { |
| | | return request<Api.Md.MatTypeList>({ |
| | | url: '/md/matType/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢ç©æç±»å */ |
| | | export function fetchCreateMatType (data: Api.Md.MatTypeOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/matType', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹ç©æç±»å */ |
| | | export function fetchUpdateMatType (data: Api.Md.MatTypeOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/matType', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå é¤ç©æç±»å */ |
| | | export function fetchBatchDeleteMatType (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/md/matType/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åç©æå表 */ |
| | | export function fetchGetMatList (params?: Api.Md.MatSearchParams) { |
| | | return request<Api.Md.MatList>({ |
| | | url: '/md/mat/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢ç©æ */ |
| | | export function fetchCreateMat (data: Api.Md.MatOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/mat', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹ç©æ */ |
| | | export function fetchUpdateMat (data: Api.Md.MatOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/mat', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå é¤ç©æ */ |
| | | export function fetchBatchDeleteMat (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/md/mat/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åæææ£éªç»è®¡å表 */ |
| | | export function fetchGetMatcheckList (params?: Api.Qm.MatcheckSearchParams) { |
| | | return request<Api.Qm.MatcheckList>({ |
| | | url: '/qm/matcheck/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | |
| | | export function fetchCheckItemList (params?: Api.Qm.MatcheckSearchParams) { |
| | | return request<Api.Qm.MatcheckCustomItem[]>({ |
| | | url: '/qm/matcheck/listCheckItem', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å¤è¡¨æ¥è¯¢ |
| | | * @param params |
| | | */ |
| | | export function fetchGetQmMatcheckList (params?: Api.Qm.MatcheckSearchParams) { |
| | | return request<Api.Qm.MatcheckList[]>({ |
| | | url: '/qm/matcheck/listQmMatcheck', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | |
| | | /** æ°å¢æææ£éªç»è®¡ */ |
| | | export function fetchCreateMatcheck (data: Api.Qm.MatcheckOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/matcheck', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹æææ£éªç»è®¡ */ |
| | | export function fetchUpdateMatcheck (data: Api.Qm.MatcheckOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/matcheck', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå é¤æææ£éªç»è®¡ */ |
| | | export function fetchBatchDeleteMatcheck (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/qm/matcheck/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Md |
| | | * |
| | | * backend api module: "Md" |
| | | */ |
| | | namespace Md { |
| | | /** mat type */ |
| | | type MatType = Common.CommonRecord<{ |
| | | /** id */ |
| | | id: CommonType.IdType; |
| | | /** ç©æç»å¤é® */ |
| | | gid: CommonType.IdType; |
| | | /** ç¼ç */ |
| | | code: string; |
| | | /** åç§° */ |
| | | name: string; |
| | | /** æè¿° */ |
| | | des: string; |
| | | /** å¯ç¨ */ |
| | | enable: number; |
| | | /** å é¤ */ |
| | | del: string; |
| | | /** mesç¼ç */ |
| | | mesCode: string; |
| | | /** å建人 */ |
| | | createUserName: string; |
| | | /** å建æ¶é´ */ |
| | | createUserTime: string; |
| | | /** æ´æ°äºº */ |
| | | updateUserName: string; |
| | | /** æ´æ°æ¶é´ */ |
| | | updateUserTime: string; |
| | | }>; |
| | | |
| | | /** mat type search params */ |
| | | type MatTypeSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.MatType, |
| | | | 'code' |
| | | | 'name' |
| | | | 'enable' |
| | | | 'del' |
| | | | 'mesCode' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** mat type operate params */ |
| | | type MatTypeOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.MatType, |
| | | | 'id' |
| | | | 'gid' |
| | | | 'code' |
| | | | 'name' |
| | | | 'des' |
| | | | 'enable' |
| | | | 'del' |
| | | | 'mesCode' |
| | | | 'createUserName' |
| | | | 'createUserTime' |
| | | | 'updateUserName' |
| | | | 'updateUserTime' |
| | | > |
| | | >; |
| | | |
| | | /** mat type list */ |
| | | type MatTypeList = Api.Common.PaginatingQueryRecord<MatType>; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Md |
| | | * |
| | | * backend api module: "Md" |
| | | */ |
| | | namespace Md { |
| | | /** mat */ |
| | | type Mat = Common.CommonRecord<{ |
| | | /** id */ |
| | | id: CommonType.IdType; |
| | | /** ç©æä»£ç */ |
| | | code: string; |
| | | /** å
¨ç§° */ |
| | | name: string; |
| | | /** ç®ç§° */ |
| | | simpleName: string; |
| | | /** æè¿° */ |
| | | des: string; |
| | | /** åä½ */ |
| | | uid: CommonType.IdType; |
| | | /** æåæ´æ°æ¶é´ */ |
| | | lastUpdateTime: string; |
| | | /** å¯ç¨ */ |
| | | enable: number; |
| | | /** å é¤ */ |
| | | del: string; |
| | | /** ç©æç±»å */ |
| | | tid: CommonType.IdType; |
| | | /** å建人 */ |
| | | createUserName: string; |
| | | /** å建æ¶é´ */ |
| | | createUserTime: string; |
| | | /** æ´æ°äºº */ |
| | | updateUserName: string; |
| | | /** æ´æ°æ¶é´ */ |
| | | updateUserTime: string; |
| | | }>; |
| | | |
| | | /** mat search params */ |
| | | type MatSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.Mat, |
| | | | 'code' |
| | | | 'name' |
| | | | 'simpleName' |
| | | | 'enable' |
| | | | 'del' |
| | | | 'tid' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** mat operate params */ |
| | | type MatOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.Mat, |
| | | | 'id' |
| | | | 'code' |
| | | | 'name' |
| | | | 'simpleName' |
| | | | 'des' |
| | | | 'uid' |
| | | | 'lastUpdateTime' |
| | | | 'enable' |
| | | | 'del' |
| | | | 'tid' |
| | | | 'createUserName' |
| | | | 'createUserTime' |
| | | | 'updateUserName' |
| | | | 'updateUserTime' |
| | | > |
| | | >; |
| | | |
| | | /** mat list */ |
| | | type MatList = Api.Common.PaginatingQueryRecord<Mat>; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Qm |
| | | * |
| | | * backend api module: "Qm" |
| | | */ |
| | | namespace Qm { |
| | | /** matcheck */ |
| | | type Matcheck = Common.CommonRecord<{ |
| | | /** id */ |
| | | id: CommonType.IdType; |
| | | /** æ±æ»è¡¨ID */ |
| | | pid: CommonType.IdType; |
| | | /** æ£éªæ¹æ¬¡ */ |
| | | batchCode: string; |
| | | /** çå· */ |
| | | matCode: string; |
| | | /** 仪å¨ç¼å· */ |
| | | instrumentCode: string; |
| | | /** ææ¯è¦æ± */ |
| | | techReq: string; |
| | | /** æ£éªä¾æ® */ |
| | | checkStd: string; |
| | | /** æµè¯ç¯å¢ */ |
| | | testEnv: string; |
| | | /** æ£éªé¡¹ç®COD */ |
| | | itemCode: string; |
| | | /** æ£éªé¡¹ç®åç§° */ |
| | | itemName: string; |
| | | /** è®¾å¤ */ |
| | | eqp: string; |
| | | /** çå· */ |
| | | subBatchCode: string; |
| | | /** æ¯çæ£éªæ°é */ |
| | | sampleNumber: number; |
| | | /** åæ ·ç±»å */ |
| | | sampleType: number; |
| | | /** æ£éªå */ |
| | | checkName: string; |
| | | /** æ£éªæ¶é´ */ |
| | | checkTime: string; |
| | | /** 夿 ¸å */ |
| | | reviewName: string; |
| | | /** 夿 ¸æ¶é´ */ |
| | | reviewTime: string; |
| | | /** æå¤§å¼ */ |
| | | maxval: number; |
| | | /** æå°å¼ */ |
| | | minval: number; |
| | | /** å¹³åå¼ */ |
| | | avgval: number; |
| | | /** SDå¼ */ |
| | | sdval: number; |
| | | /** CVå¼ */ |
| | | cvval: number; |
| | | /** CPKå¼ */ |
| | | cpkval: number; |
| | | /** è¶
æ æ° */ |
| | | badval: number; |
| | | /** å¤å® */ |
| | | judge: string; |
| | | /** å项å¤å® */ |
| | | singlejudge: string; |
| | | /** çæ¬åç§° */ |
| | | verName: string; |
| | | /** çæ¬ç¼å· */ |
| | | verCode: string; |
| | | /** ä¿åæ */ |
| | | archDate: string; |
| | | /** å 餿 å¿ */ |
| | | del: number; |
| | | /** 0-æªä¸ä¼ mes 1-å·²ä¸ä¼ */ |
| | | flag: string; |
| | | /** ä¸ä¼ MESæ¶é´ */ |
| | | toMesTime: string; |
| | | /** 夿³¨ */ |
| | | chkDes: string; |
| | | /** æ£éªäººå±ç¤ºå */ |
| | | checker: string; |
| | | /** å¤å®è§ç¨ codeï¼éæ°æ®åºåæ®µï¼ */ |
| | | judgeCode: string; |
| | | /** æ¯å¦çæ 30 æ¯çæç»ï¼éæ°æ®åºåæ®µï¼ */ |
| | | generateDetails: string; |
| | | /** æ£æµç±»åï¼éæ°æ®åºåæ®µï¼ */ |
| | | checkType: string; |
| | | }>; |
| | | |
| | | /** matcheck search params */ |
| | | type MatcheckSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Matcheck, |
| | | | 'batchCode' |
| | | | 'judgeCode' |
| | | | 'matCode' |
| | | | 'checkName' |
| | | | 'checkTime' |
| | | | 'reviewName' |
| | | | 'reviewTime' |
| | | > & |
| | | Api.Common.CommonSearchParams & { |
| | | /** æ£éªé¡¹ä¸æçæ¥å£ä½¿ç¨çå¤å®è§ç¨ id */ |
| | | judgeId?: string; |
| | | } |
| | | >; |
| | | |
| | | /** matcheck operate params */ |
| | | type MatcheckOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Matcheck, |
| | | | 'id' |
| | | | 'pid' |
| | | | 'batchCode' |
| | | | 'matCode' |
| | | | 'instrumentCode' |
| | | | 'techReq' |
| | | | 'checkStd' |
| | | | 'testEnv' |
| | | | 'itemCode' |
| | | | 'itemName' |
| | | | 'eqp' |
| | | | 'subBatchCode' |
| | | | 'sampleNumber' |
| | | | 'sampleType' |
| | | | 'checkName' |
| | | | 'checkTime' |
| | | | 'reviewName' |
| | | | 'reviewTime' |
| | | | 'maxval' |
| | | | 'minval' |
| | | | 'avgval' |
| | | | 'sdval' |
| | | | 'cvval' |
| | | | 'cpkval' |
| | | | 'badval' |
| | | | 'judge' |
| | | | 'singlejudge' |
| | | | 'verName' |
| | | | 'verCode' |
| | | | 'archDate' |
| | | | 'del' |
| | | | 'flag' |
| | | | 'toMesTime' |
| | | | 'chkDes' |
| | | | 'checker' |
| | | | 'judgeCode' |
| | | | 'generateDetails' |
| | | | 'checkType' |
| | | > |
| | | >; |
| | | |
| | | /** matcheck list */ |
| | | type MatcheckList = Api.Common.PaginatingQueryRecord<Matcheck>; |
| | | |
| | | /** custom matcheck item */ |
| | | type MatcheckCustomItem = { |
| | | itemCode: string; |
| | | itemName: string; |
| | | }; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { ref } from 'vue'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { fetchBatchDeleteMatType, fetchGetMatTypeList } from '@/service/api/md/mat-type'; |
| | | import { useAppStore } from '@/store/modules/app'; |
| | | import { useAuth } from '@/hooks/business/auth'; |
| | | import { useDownload } from '@/hooks/business/download'; |
| | | import { defaultTransform, useNaivePaginatedTable, useTableOperate } from '@/hooks/common/table'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import MatTypeOperateDrawer from './modules/mat-type-operate-drawer.vue'; |
| | | import MatTypeSearch from './modules/mat-type-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatTypeList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const searchParams = ref<Api.Md.MatTypeSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | code: null, |
| | | name: null, |
| | | enable: 1, |
| | | del: '0', |
| | | mesCode: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetMatTypeList(searchParams.value), |
| | | transform: response => defaultTransform(response), |
| | | onPaginationParamsChange: params => { |
| | | searchParams.value.pageNum = params.page; |
| | | searchParams.value.pageSize = params.pageSize; |
| | | }, |
| | | columns: () => [ |
| | | { |
| | | type: 'selection', |
| | | align: 'center', |
| | | width: 48 |
| | | }, |
| | | { |
| | | key: 'index', |
| | | title: $t('common.index'), |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_, index) => index + 1 |
| | | }, |
| | | { |
| | | key: 'code', |
| | | title: 'ç¼ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'name', |
| | | title: 'åç§°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'des', |
| | | title: 'æè¿°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'enable', |
| | | title: 'å¯ç¨', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => (row.enable == 1 ? 'æ¯' : 'å¦') |
| | | }, |
| | | { |
| | | key: 'del', |
| | | title: 'å é¤', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => (row.del == 1 ? 'æ¯' : 'å¦') |
| | | }, |
| | | { |
| | | key: 'mesCode', |
| | | title: 'mesç¼ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'createUserName', |
| | | title: 'å建人', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'createUserTime', |
| | | title: 'å建æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'updateUserName', |
| | | title: 'æ´æ°äºº', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'updateUserTime', |
| | | title: 'æ´æ°æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | fixed: 'right', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('md:matType:edit') || !hasAuth('md:matType:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('md:matType:edit')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="primary" |
| | | icon="material-symbols:drive-file-rename-outline-outline" |
| | | tooltipContent={$t('common.edit')} |
| | | onClick={() => edit(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const deleteBtn = () => { |
| | | if (!hasAuth('md:matType:remove')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="error" |
| | | icon="material-symbols:delete-outline" |
| | | tooltipContent={$t('common.delete')} |
| | | popconfirmContent={$t('common.confirmDelete')} |
| | | onPositiveClick={() => handleDelete(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <div class="flex-center gap-8px"> |
| | | {editBtn()} |
| | | {divider()} |
| | | {deleteBtn()} |
| | | </div> |
| | | ); |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | const { drawerVisible, operateType, editingData, handleAdd, handleEdit, checkedRowKeys, onBatchDeleted, onDeleted } = |
| | | useTableOperate(data, 'id', getData); |
| | | |
| | | async function handleBatchDelete() { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMatType(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMatType([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/md/matType/export', searchParams.value, `ç©æç±»å_${new Date().getTime()}.xlsx`); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto"> |
| | | <MatTypeSearch v-model:model="searchParams" @search="getDataByPage" /> |
| | | <NCard title="ç©æç±»åå表" :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden"> |
| | | <template #header-extra> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('md:matType:add')" |
| | | :show-delete="hasAuth('md:matType:remove')" |
| | | :show-export="hasAuth('md:matType:export')" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @export="handleExport" |
| | | @refresh="getData" |
| | | /> |
| | | </template> |
| | | <NDataTable |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="data" |
| | | size="small" |
| | | :flex-height="!appStore.isMobile" |
| | | :scroll-x="scrollX" |
| | | :loading="loading" |
| | | remote |
| | | :row-key="row => row.id" |
| | | :pagination="mobilePagination" |
| | | class="sm:h-full" |
| | | /> |
| | | <MatTypeOperateDrawer |
| | | v-model:visible="drawerVisible" |
| | | :operate-type="operateType" |
| | | :row-data="editingData" |
| | | @submitted="getDataByPage" |
| | | /> |
| | | </NCard> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref, watch } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateMatType, fetchUpdateMatType } from '@/service/api/md/mat-type'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatTypeOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Md.MatType | null; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | | |
| | | interface Emits { |
| | | (e: 'submitted'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const visible = defineModel<boolean>('visible', { |
| | | default: false |
| | | }); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | const { createRequiredRule } = useFormRules(); |
| | | |
| | | const title = computed(() => { |
| | | const titles: Record<NaiveUI.TableOperateType, string> = { |
| | | add: 'æ°å¢ç©æç±»å', |
| | | edit: 'ç¼è¾ç©æç±»å' |
| | | }; |
| | | return titles[props.operateType]; |
| | | }); |
| | | |
| | | type Model = Api.Md.MatTypeOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | id: '', |
| | | gid: '', |
| | | code: '', |
| | | name: '', |
| | | des: '', |
| | | enable: null, |
| | | del: '', |
| | | mesCode: '', |
| | | createUserName: '', |
| | | createUserTime: null, |
| | | updateUserName: '', |
| | | updateUserTime: null |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | id: createRequiredRule('idä¸è½ä¸ºç©º'), |
| | | }; |
| | | |
| | | function handleUpdateModelWhenEdit() { |
| | | model.value = createDefaultModel(); |
| | | |
| | | if (props.operateType === 'edit' && props.rowData) { |
| | | Object.assign(model.value, jsonClone(props.rowData)); |
| | | } |
| | | } |
| | | |
| | | function closeDrawer() { |
| | | visible.value = false; |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | await validate(); |
| | | |
| | | const { id, gid, code, name, des, enable, del, mesCode, createUserName, createUserTime, updateUserName, updateUserTime } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateMatType({ gid, code, name, des, enable, del, mesCode, createUserName, createUserTime, updateUserName, updateUserTime }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateMatType({ id, gid, code, name, des, enable, del, mesCode, createUserName, createUserTime, updateUserName, updateUserTime }); |
| | | if (error) return; |
| | | } |
| | | |
| | | window.$message?.success($t('common.updateSuccess')); |
| | | closeDrawer(); |
| | | emit('submitted'); |
| | | } |
| | | |
| | | watch(visible, () => { |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%"> |
| | | <NDrawerContent :title="title" :native-scrollbar="false" closable> |
| | | <NForm ref="formRef" :model="model" :rules="rules"> |
| | | <NFormItem label="ç©æç»å¤é®" path="gid"> |
| | | <NInput v-model:value="model.gid" placeholder="请è¾å
¥ç©æç»å¤é®" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç¼ç " path="code"> |
| | | <NInput v-model:value="model.code" placeholder="请è¾å
¥ç¼ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="åç§°" path="name"> |
| | | <NInput v-model:value="model.name" placeholder="请è¾å
¥åç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="æè¿°" path="des"> |
| | | <NInput v-model:value="model.des" placeholder="请è¾å
¥æè¿°" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¯ç¨" path="enable"> |
| | | <NInput v-model:value="model.enable" placeholder="请è¾å
¥å¯ç¨" /> |
| | | </NFormItem> |
| | | <NFormItem label="å é¤" path="del"> |
| | | <NInput v-model:value="model.del" placeholder="请è¾å
¥å é¤" /> |
| | | </NFormItem> |
| | | <NFormItem label="mesç¼ç " path="mesCode"> |
| | | <NInput v-model:value="model.mesCode" placeholder="请è¾å
¥mesç¼ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="å建人" path="createUserName"> |
| | | <NInput v-model:value="model.createUserName" placeholder="请è¾å
¥å建人" /> |
| | | </NFormItem> |
| | | <NFormItem label="å建æ¶é´" path="createUserTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.createUserTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="æ´æ°äºº" path="updateUserName"> |
| | | <NInput v-model:value="model.updateUserName" placeholder="请è¾å
¥æ´æ°äºº" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ´æ°æ¶é´" path="updateUserTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.updateUserTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | </NForm> |
| | | <template #footer> |
| | | <NSpace :size="16"> |
| | | <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton> |
| | | <NButton type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</NButton> |
| | | </NSpace> |
| | | </template> |
| | | </NDrawerContent> |
| | | </NDrawer> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { toRaw } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatTypeSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Md.MatTypeSearchParams>('model', { required: true }); |
| | | |
| | | const defaultModel = jsonClone(toRaw(model.value)); |
| | | |
| | | function resetModel() { |
| | | Object.assign(model.value, defaultModel); |
| | | } |
| | | |
| | | async function reset() { |
| | | await restoreValidation(); |
| | | resetModel(); |
| | | emit('search'); |
| | | } |
| | | |
| | | async function search() { |
| | | await validate(); |
| | | emit('search'); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <NCard :bordered="false" size="small" class="card-wrapper"> |
| | | <NCollapse> |
| | | <NCollapseItem :title="$t('common.search')" name="md-mat-type-search"> |
| | | <NForm ref="formRef" :model="model" label-placement="left" :label-width="80"> |
| | | <NGrid responsive="screen" item-responsive> |
| | | <NFormItemGi span="24 s:12 m:6" label="ç¼ç " label-width="auto" path="code" class="pr-24px"> |
| | | <NInput v-model:value="model.code" placeholder="请è¾å
¥ç¼ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="åç§°" label-width="auto" path="name" class="pr-24px"> |
| | | <NInput v-model:value="model.name" placeholder="请è¾å
¥åç§°" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¯ç¨" label-width="auto" path="enable" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.enable" |
| | | placeholder="è¯·éæ©å¯ç¨" |
| | | :options="[ |
| | | { label: 'æ¯', value: 1 }, |
| | | { label: 'å¦', value: 0 } |
| | | ]" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å é¤" label-width="auto" path="del" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.del" |
| | | placeholder="è¯·éæ©å é¤" |
| | | :options="[ |
| | | { label: 'æ¯', value: '1' }, |
| | | { label: 'å¦', value: '0' } |
| | | ]" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="mesç¼ç " label-width="auto" path="mesCode" class="pr-24px"> |
| | | <NInput v-model:value="model.mesCode" placeholder="请è¾å
¥mesç¼ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi :show-feedback="false" span="24" class="pr-24px"> |
| | | <NSpace class="w-full" justify="end"> |
| | | <NButton @click="reset"> |
| | | <template #icon> |
| | | <icon-ic-round-refresh class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.reset') }} |
| | | </NButton> |
| | | <NButton type="primary" ghost @click="search"> |
| | | <template #icon> |
| | | <icon-ic-round-search class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.search') }} |
| | | </NButton> |
| | | </NSpace> |
| | | </NFormItemGi> |
| | | </NGrid> |
| | | </NForm> |
| | | </NCollapseItem> |
| | | </NCollapse> |
| | | </NCard> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { onMounted, ref } from 'vue'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { fetchBatchDeleteMat, fetchGetMatList } from '@/service/api/md/mat'; |
| | | import { fetchGetMatTypeList } from '@/service/api/md/mat-type'; |
| | | import { useAppStore } from '@/store/modules/app'; |
| | | import { useAuth } from '@/hooks/business/auth'; |
| | | import { useDownload } from '@/hooks/business/download'; |
| | | import { defaultTransform, useNaivePaginatedTable, useTableOperate } from '@/hooks/common/table'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import MatOperateDrawer from './modules/mat-operate-drawer.vue'; |
| | | import MatSearch from './modules/mat-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const matTypeOptions = ref<CommonType.Option[]>([]); |
| | | |
| | | async function getMatTypeOptions() { |
| | | const { data: typeData } = await fetchGetMatTypeList(); |
| | | if (typeData) { |
| | | matTypeOptions.value = typeData.rows.map(item => ({ |
| | | label: item.name, |
| | | value: item.code |
| | | })); |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getMatTypeOptions(); |
| | | }); |
| | | |
| | | const searchParams = ref<Api.Md.MatSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | code: null, |
| | | name: null, |
| | | simpleName: null, |
| | | enable: 1, |
| | | del: '0', |
| | | tid: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetMatList(searchParams.value), |
| | | transform: response => defaultTransform(response), |
| | | onPaginationParamsChange: params => { |
| | | searchParams.value.pageNum = params.page; |
| | | searchParams.value.pageSize = params.pageSize; |
| | | }, |
| | | columns: () => [ |
| | | { |
| | | type: 'selection', |
| | | align: 'center', |
| | | width: 48 |
| | | }, |
| | | { |
| | | key: 'index', |
| | | title: $t('common.index'), |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_, index) => index + 1 |
| | | }, |
| | | { |
| | | key: 'code', |
| | | title: 'ç©æä»£ç ', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'name', |
| | | title: 'å
¨ç§°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'simpleName', |
| | | title: 'ç®ç§°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'des', |
| | | title: 'æè¿°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'uid', |
| | | title: 'åä½', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'lastUpdateTime', |
| | | title: 'æåæ´æ°æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'enable', |
| | | title: 'å¯ç¨', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => (row.enable === 1 ? 'æ¯' : 'å¦') |
| | | }, |
| | | { |
| | | key: 'del', |
| | | title: 'å é¤', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => (row.del === '1' ? 'æ¯' : 'å¦') |
| | | }, |
| | | { |
| | | key: 'tid', |
| | | title: 'ç©æç±»å', |
| | | align: 'center', |
| | | minWidth: 120, |
| | | render: row => { |
| | | if (row.tid) { |
| | | return matTypeOptions.value.find(item => String(item.value) === String(row.tid))?.label || row.tid; |
| | | } |
| | | return ''; |
| | | } |
| | | }, |
| | | { |
| | | key: 'createUserName', |
| | | title: 'å建人', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'createUserTime', |
| | | title: 'å建æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'updateUserName', |
| | | title: 'æ´æ°äºº', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'updateUserTime', |
| | | title: 'æ´æ°æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | fixed: 'right', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('md:mat:edit') || !hasAuth('md:mat:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('md:mat:edit')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="primary" |
| | | icon="material-symbols:drive-file-rename-outline-outline" |
| | | tooltipContent={$t('common.edit')} |
| | | onClick={() => edit(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const deleteBtn = () => { |
| | | if (!hasAuth('md:mat:remove')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="error" |
| | | icon="material-symbols:delete-outline" |
| | | tooltipContent={$t('common.delete')} |
| | | popconfirmContent={$t('common.confirmDelete')} |
| | | onPositiveClick={() => handleDelete(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <div class="flex-center gap-8px"> |
| | | {editBtn()} |
| | | {divider()} |
| | | {deleteBtn()} |
| | | </div> |
| | | ); |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | const { drawerVisible, operateType, editingData, handleAdd, handleEdit, checkedRowKeys, onBatchDeleted, onDeleted } = |
| | | useTableOperate(data, 'id', getData); |
| | | |
| | | async function handleBatchDelete() { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMat(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMat([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/md/mat/export', searchParams.value, `ç©æ_${new Date().getTime()}.xlsx`); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto"> |
| | | <MatSearch v-model:model="searchParams" @search="getDataByPage" /> |
| | | <NCard title="ç©æå表" :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden"> |
| | | <template #header-extra> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('md:mat:add')" |
| | | :show-delete="hasAuth('md:mat:remove')" |
| | | :show-export="hasAuth('md:mat:export')" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @export="handleExport" |
| | | @refresh="getData" |
| | | /> |
| | | </template> |
| | | <NDataTable |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="data" |
| | | size="small" |
| | | :flex-height="!appStore.isMobile" |
| | | :scroll-x="scrollX" |
| | | :loading="loading" |
| | | remote |
| | | :row-key="row => row.id" |
| | | :pagination="mobilePagination" |
| | | class="sm:h-full" |
| | | /> |
| | | <MatOperateDrawer |
| | | v-model:visible="drawerVisible" |
| | | :operate-type="operateType" |
| | | :row-data="editingData" |
| | | @submitted="getDataByPage" |
| | | /> |
| | | </NCard> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref, watch } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateMat, fetchUpdateMat } from '@/service/api/md/mat'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Md.Mat | null; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | | |
| | | interface Emits { |
| | | (e: 'submitted'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const visible = defineModel<boolean>('visible', { |
| | | default: false |
| | | }); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | const { createRequiredRule } = useFormRules(); |
| | | |
| | | const title = computed(() => { |
| | | const titles: Record<NaiveUI.TableOperateType, string> = { |
| | | add: 'æ°å¢ç©æ', |
| | | edit: 'ç¼è¾ç©æ' |
| | | }; |
| | | return titles[props.operateType]; |
| | | }); |
| | | |
| | | type Model = Api.Md.MatOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | id: '', |
| | | code: '', |
| | | name: '', |
| | | simpleName: '', |
| | | des: '', |
| | | uid: '', |
| | | lastUpdateTime: null, |
| | | enable: null, |
| | | del: '', |
| | | tid: '', |
| | | createUserName: '', |
| | | createUserTime: null, |
| | | updateUserName: '', |
| | | updateUserTime: null |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | id: createRequiredRule('idä¸è½ä¸ºç©º'), |
| | | }; |
| | | |
| | | function handleUpdateModelWhenEdit() { |
| | | model.value = createDefaultModel(); |
| | | |
| | | if (props.operateType === 'edit' && props.rowData) { |
| | | Object.assign(model.value, jsonClone(props.rowData)); |
| | | } |
| | | } |
| | | |
| | | function closeDrawer() { |
| | | visible.value = false; |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | await validate(); |
| | | |
| | | const { id, code, name, simpleName, des, uid, lastUpdateTime, enable, del, tid, createUserName, createUserTime, updateUserName, updateUserTime } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateMat({ code, name, simpleName, des, uid, lastUpdateTime, enable, del, tid, createUserName, createUserTime, updateUserName, updateUserTime }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateMat({ id, code, name, simpleName, des, uid, lastUpdateTime, enable, del, tid, createUserName, createUserTime, updateUserName, updateUserTime }); |
| | | if (error) return; |
| | | } |
| | | |
| | | window.$message?.success($t('common.updateSuccess')); |
| | | closeDrawer(); |
| | | emit('submitted'); |
| | | } |
| | | |
| | | watch(visible, () => { |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%"> |
| | | <NDrawerContent :title="title" :native-scrollbar="false" closable> |
| | | <NForm ref="formRef" :model="model" :rules="rules"> |
| | | <NFormItem label="ç©æä»£ç " path="code"> |
| | | <NInput v-model:value="model.code" placeholder="请è¾å
¥ç©æä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="å
¨ç§°" path="name"> |
| | | <NInput v-model:value="model.name" placeholder="请è¾å
¥å
¨ç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç®ç§°" path="simpleName"> |
| | | <NInput v-model:value="model.simpleName" placeholder="请è¾å
¥ç®ç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="æè¿°" path="des"> |
| | | <NInput v-model:value="model.des" placeholder="请è¾å
¥æè¿°" /> |
| | | </NFormItem> |
| | | <NFormItem label="åä½" path="uid"> |
| | | <NInput v-model:value="model.uid" placeholder="请è¾å
¥åä½" /> |
| | | </NFormItem> |
| | | <NFormItem label="æåæ´æ°æ¶é´" path="lastUpdateTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.lastUpdateTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å¯ç¨" path="enable"> |
| | | <NInput v-model:value="model.enable" placeholder="请è¾å
¥å¯ç¨" /> |
| | | </NFormItem> |
| | | <NFormItem label="å é¤" path="del"> |
| | | <NInput v-model:value="model.del" placeholder="请è¾å
¥å é¤" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç©æç±»å" path="tid"> |
| | | <NInput v-model:value="model.tid" placeholder="请è¾å
¥ç©æç±»å" /> |
| | | </NFormItem> |
| | | <NFormItem label="å建人" path="createUserName"> |
| | | <NInput v-model:value="model.createUserName" placeholder="请è¾å
¥å建人" /> |
| | | </NFormItem> |
| | | <NFormItem label="å建æ¶é´" path="createUserTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.createUserTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="æ´æ°äºº" path="updateUserName"> |
| | | <NInput v-model:value="model.updateUserName" placeholder="请è¾å
¥æ´æ°äºº" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ´æ°æ¶é´" path="updateUserTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.updateUserTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | </NForm> |
| | | <template #footer> |
| | | <NSpace :size="16"> |
| | | <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton> |
| | | <NButton type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</NButton> |
| | | </NSpace> |
| | | </template> |
| | | </NDrawerContent> |
| | | </NDrawer> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { onMounted, ref, toRaw } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchGetMatTypeList } from '@/service/api/md/mat-type'; |
| | | import { useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Md.MatSearchParams>('model', { required: true }); |
| | | |
| | | const defaultModel = jsonClone(toRaw(model.value)); |
| | | |
| | | const matTypeOptions = ref<CommonType.Option[]>([]); |
| | | |
| | | async function getMatTypeOptions() { |
| | | const { data } = await fetchGetMatTypeList(); |
| | | if (data) { |
| | | matTypeOptions.value = data.rows.map(item => ({ |
| | | label: item.name, |
| | | value: item.code |
| | | })); |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getMatTypeOptions(); |
| | | }); |
| | | |
| | | function resetModel() { |
| | | Object.assign(model.value, defaultModel); |
| | | } |
| | | |
| | | async function reset() { |
| | | await restoreValidation(); |
| | | resetModel(); |
| | | emit('search'); |
| | | } |
| | | |
| | | async function search() { |
| | | await validate(); |
| | | emit('search'); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <NCard :bordered="false" size="small" class="card-wrapper"> |
| | | <NCollapse> |
| | | <NCollapseItem :title="$t('common.search')" name="md-mat-search"> |
| | | <NForm ref="formRef" :model="model" label-placement="left" :label-width="80"> |
| | | <NGrid responsive="screen" item-responsive> |
| | | <NFormItemGi span="24 s:12 m:6" label="ç©æä»£ç " label-width="auto" path="code" class="pr-24px"> |
| | | <NInput v-model:value="model.code" placeholder="请è¾å
¥ç©æä»£ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å
¨ç§°" label-width="auto" path="name" class="pr-24px"> |
| | | <NInput v-model:value="model.name" placeholder="请è¾å
¥å
¨ç§°" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="ç®ç§°" label-width="auto" path="simpleName" class="pr-24px"> |
| | | <NInput v-model:value="model.simpleName" placeholder="请è¾å
¥ç®ç§°" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¯ç¨" label-width="auto" path="enable" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.enable" |
| | | placeholder="è¯·éæ©å¯ç¨" |
| | | :options="[ |
| | | { label: 'æ¯', value: 1 }, |
| | | { label: 'å¦', value: 0 } |
| | | ]" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å é¤" label-width="auto" path="del" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.del" |
| | | placeholder="è¯·éæ©å é¤" |
| | | :options="[ |
| | | { label: 'æ¯', value: '1' }, |
| | | { label: 'å¦', value: '0' } |
| | | ]" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="ç©æç±»å" label-width="auto" path="tid" class="pr-24px"> |
| | | <NSelect v-model:value="model.tid" placeholder="è¯·éæ©ç©æç±»å" :options="matTypeOptions" clearable /> |
| | | </NFormItemGi> |
| | | <NFormItemGi :show-feedback="false" span="24" class="pr-24px"> |
| | | <NSpace class="w-full" justify="end"> |
| | | <NButton @click="reset"> |
| | | <template #icon> |
| | | <icon-ic-round-refresh class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.reset') }} |
| | | </NButton> |
| | | <NButton type="primary" ghost @click="search"> |
| | | <template #icon> |
| | | <icon-ic-round-search class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.search') }} |
| | | </NButton> |
| | | </NSpace> |
| | | </NFormItemGi> |
| | | </NGrid> |
| | | </NForm> |
| | | </NCollapseItem> |
| | | </NCollapse> |
| | | </NCard> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'; |
| | | import type { DataTableRowKey } from 'naive-ui'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchBatchDeleteJudgeDetails, fetchGetJudgeDetailsTree } from '@/service/api/qm/judge-details'; |
| | | import { useAuth } from '@/hooks/business/auth'; |
| | | import { useNaiveTable } from '@/hooks/common/table'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import JudgeDetailsOperateDrawer from './judge-details-operate-drawer.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'JudgeDetailsSubTable' |
| | | }); |
| | | |
| | | interface Props { |
| | | judgeId?: CommonType.IdType | null; |
| | | } |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | judgeId: null |
| | | }); |
| | | |
| | | interface JudgeDetailsSubRow extends Api.Qm.JudgeDetails { |
| | | children?: JudgeDetailsSubRow[]; |
| | | } |
| | | |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const checkedRowKeys = ref<CommonType.IdType[]>([]); |
| | | const drawerVisible = ref(false); |
| | | const operateType = ref<NaiveUI.TableOperateType>('add'); |
| | | const editingData = ref<Api.Qm.JudgeDetails | null>(null); |
| | | const showFullscreen = ref(false); |
| | | const fullscreenStyle = ref<Record<string, string>>({}); |
| | | |
| | | function handleAdd() { |
| | | if (!props.judgeId) { |
| | | window.$message?.warning('请å
éæ©å¤å®ä¾æ®'); |
| | | return; |
| | | } |
| | | operateType.value = 'add'; |
| | | editingData.value = { judgeId: props.judgeId } as any; |
| | | drawerVisible.value = true; |
| | | } |
| | | |
| | | function handleEdit(row: JudgeDetailsSubRow) { |
| | | operateType.value = 'edit'; |
| | | editingData.value = jsonClone(row); |
| | | drawerVisible.value = true; |
| | | } |
| | | |
| | | async function handleBatchDelete() { |
| | | if (checkedRowKeys.value.length === 0) return; |
| | | const { error } = await fetchBatchDeleteJudgeDetails(checkedRowKeys.value); |
| | | if (error) return; |
| | | window.$message?.success($t('common.deleteSuccess')); |
| | | checkedRowKeys.value = []; |
| | | await getData(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | const { error } = await fetchBatchDeleteJudgeDetails([id]); |
| | | if (error) return; |
| | | window.$message?.success($t('common.deleteSuccess')); |
| | | await getData(); |
| | | } |
| | | |
| | | const { |
| | | columns, |
| | | columnChecks, |
| | | data: rows, |
| | | loading, |
| | | getData, |
| | | scrollX |
| | | } = useNaiveTable<Api.Common.PaginatingQueryRecord<Api.Qm.JudgeDetails>, Api.Qm.JudgeDetails>({ |
| | | api: async () => { |
| | | if (!props.judgeId) return { rows: [], total: 0, pageNum: 1 } as any; |
| | | const { data } = await fetchGetJudgeDetailsTree({ |
| | | pageNum: 1, |
| | | pageSize: 9999, |
| | | judgeId: props.judgeId |
| | | }); |
| | | return data; |
| | | }, |
| | | columns: () => [ |
| | | { |
| | | type: 'selection', |
| | | align: 'center', |
| | | width: 48 |
| | | }, |
| | | { |
| | | key: 'index', |
| | | title: $t('common.index'), |
| | | align: 'center', |
| | | width: 56, |
| | | render: (_: any, index: number) => index + 1 |
| | | }, |
| | | { |
| | | key: 'itemName', |
| | | title: 'å¤å®é¡¹', |
| | | align: 'left', |
| | | width: 250, |
| | | tree: true |
| | | } as any, |
| | | { |
| | | key: 'value3', |
| | | title: 'æ åå¼', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'value1', |
| | | title: 'ä¸éå¼', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'value2', |
| | | title: 'ä¸éå¼', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'cls', |
| | | title: '级å«', |
| | | align: 'center', |
| | | width: 80 |
| | | }, |
| | | { |
| | | key: 'stdscore', |
| | | title: 'åå¼', |
| | | align: 'center', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | | key: 'decisionDes', |
| | | title: '夿³¨', |
| | | align: 'center', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | | key: 'updateUser', |
| | | title: 'ä¿®æ¹äºº', |
| | | align: 'center', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | fixed: 'right', |
| | | align: 'center', |
| | | width: 130, |
| | | render: (row: any) => { |
| | | const divider = () => { |
| | | if (!hasAuth('qm:judgeDetails:edit') || !hasAuth('qm:judgeDetails:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('qm:judgeDetails:edit')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="primary" |
| | | icon="material-symbols:drive-file-rename-outline-outline" |
| | | tooltipContent={$t('common.edit')} |
| | | onClick={() => handleEdit(row)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const deleteBtn = () => { |
| | | if (!hasAuth('qm:judgeDetails:remove')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="error" |
| | | icon="material-symbols:delete-outline" |
| | | tooltipContent={$t('common.delete')} |
| | | popconfirmContent={$t('common.confirmDelete')} |
| | | onPositiveClick={() => handleDelete(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <div class="flex-center gap-8px"> |
| | | {editBtn()} |
| | | {divider()} |
| | | {deleteBtn()} |
| | | </div> |
| | | ); |
| | | } |
| | | } |
| | | ], |
| | | transform: response => { |
| | | return response?.rows || []; |
| | | } |
| | | }); |
| | | |
| | | const onFullscreenKeydown = (event: KeyboardEvent) => { |
| | | if (event.key === 'Escape') { |
| | | showFullscreen.value = false; |
| | | } |
| | | }; |
| | | |
| | | const cardTitle = computed(() => `å¤å®æç»ç»´æ¤`); |
| | | |
| | | watch( |
| | | () => props.judgeId, |
| | | async () => { |
| | | checkedRowKeys.value = []; |
| | | await getData(); |
| | | }, |
| | | { immediate: true } |
| | | ); |
| | | |
| | | watch( |
| | | showFullscreen, |
| | | visible => { |
| | | if (visible) { |
| | | updateFullscreenStyle(); |
| | | window.addEventListener('keydown', onFullscreenKeydown); |
| | | window.addEventListener('resize', updateFullscreenStyle); |
| | | window.addEventListener('scroll', updateFullscreenStyle, true); |
| | | return; |
| | | } |
| | | window.removeEventListener('keydown', onFullscreenKeydown); |
| | | window.removeEventListener('resize', updateFullscreenStyle); |
| | | window.removeEventListener('scroll', updateFullscreenStyle, true); |
| | | }, |
| | | { immediate: true } |
| | | ); |
| | | |
| | | onBeforeUnmount(() => { |
| | | window.removeEventListener('keydown', onFullscreenKeydown); |
| | | window.removeEventListener('resize', updateFullscreenStyle); |
| | | window.removeEventListener('scroll', updateFullscreenStyle, true); |
| | | }); |
| | | |
| | | onMounted(() => { |
| | | updateFullscreenStyle(); |
| | | }); |
| | | |
| | | function updateFullscreenStyle() { |
| | | const container = document.querySelector<HTMLElement>('.judge-content-area'); |
| | | if (!container) { |
| | | fullscreenStyle.value = { |
| | | position: 'fixed', |
| | | inset: '0', |
| | | zIndex: '20' |
| | | }; |
| | | return; |
| | | } |
| | | const rect = container.getBoundingClientRect(); |
| | | fullscreenStyle.value = { |
| | | position: 'fixed', |
| | | left: `${rect.left}px`, |
| | | top: `${rect.top}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | zIndex: '20' |
| | | }; |
| | | } |
| | | |
| | | function rowKey(row: JudgeDetailsSubRow): DataTableRowKey { |
| | | return String(row.id); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="flex-col-stretch"> |
| | | <NCard |
| | | :title="cardTitle" |
| | | :bordered="false" |
| | | size="small" |
| | | class="flex-col-stretch card-wrapper flex-1-hidden" |
| | | :content-style="{ flex: 1, overflow: 'hidden', display: 'flex', flexDirection: 'column' }" |
| | | > |
| | | <template #header-extra> |
| | | <NSpace align="center"> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('qm:judgeDetails:add')" |
| | | :show-delete="hasAuth('qm:judgeDetails:remove')" |
| | | :show-export="false" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @refresh="getData" |
| | | /> |
| | | <NButton size="small" @click="showFullscreen = true"> |
| | | <template #icon> |
| | | <icon-mdi-fullscreen class="text-icon" /> |
| | | </template> |
| | | å
¨å± |
| | | </NButton> |
| | | </NSpace> |
| | | </template> |
| | | |
| | | <NSpin :show="loading" class="h-full" content-class="h-full flex-col-stretch flex-1-hidden"> |
| | | <div v-if="!props.judgeId" class="h-full flex-center text-gray-400">请ç¹å»ä¸æ¹è¡¨æ ¼è¡æ¥çæç»</div> |
| | | <NDataTable |
| | | v-else |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="rows" |
| | | size="small" |
| | | flex-height |
| | | children-key="children" |
| | | :row-key="rowKey" |
| | | default-expand-all |
| | | striped |
| | | class="flex-1-hidden" |
| | | /> |
| | | </NSpin> |
| | | </NCard> |
| | | |
| | | <Teleport to="body"> |
| | | <div v-if="showFullscreen" class="fullscreen-mask" :style="fullscreenStyle" @click.self="showFullscreen = false"> |
| | | <NCard |
| | | :title="cardTitle" |
| | | :bordered="false" |
| | | size="small" |
| | | class="fullscreen-card flex-col-stretch" |
| | | :content-style="{ flex: 1, overflow: 'hidden', display: 'flex', flexDirection: 'column' }" |
| | | > |
| | | <template #header-extra> |
| | | <NSpace align="center"> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('qm:judgeDetails:add')" |
| | | :show-delete="hasAuth('qm:judgeDetails:remove')" |
| | | :show-export="false" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @refresh="getData" |
| | | /> |
| | | <NButton size="small" ghost type="error" @click="showFullscreen = false"> |
| | | <template #icon> |
| | | <icon-mdi-close class="text-icon" /> |
| | | </template> |
| | | å
³é |
| | | </NButton> |
| | | </NSpace> |
| | | </template> |
| | | |
| | | <NSpin :show="loading" class="h-full" content-class="h-full"> |
| | | <div v-if="!props.judgeId" class="h-full flex-center text-gray-400">请ç¹å»ä¸æ¹è¡¨æ ¼è¡æ¥çæç»</div> |
| | | <NDataTable |
| | | v-else |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="rows" |
| | | size="small" |
| | | flex-height |
| | | children-key="children" |
| | | :row-key="rowKey" |
| | | striped |
| | | class="fullscreen-table" |
| | | /> |
| | | </NSpin> |
| | | </NCard> |
| | | </div> |
| | | </Teleport> |
| | | |
| | | <JudgeDetailsOperateDrawer |
| | | v-model:visible="drawerVisible" |
| | | :operate-type="operateType" |
| | | :row-data="editingData" |
| | | @submitted="getData" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | :deep(.n-card__content) { |
| | | padding: 8px 12px; |
| | | } |
| | | |
| | | :deep(.n-data-table-th), |
| | | :deep(.n-data-table-td) { |
| | | padding: 4px 6px; |
| | | } |
| | | |
| | | .fullscreen-mask { |
| | | position: absolute; |
| | | inset: 0; |
| | | z-index: 20; |
| | | background: #fff; |
| | | padding: 0; |
| | | display: flex; |
| | | } |
| | | |
| | | .fullscreen-card { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .fullscreen-table { |
| | | height: 100%; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { ref } from 'vue'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { fetchBatchDeleteMatcheck, fetchGetQmMatcheckList } from '@/service/api/qm/matcheck'; |
| | | import { useAppStore } from '@/store/modules/app'; |
| | | import { useAuth } from '@/hooks/business/auth'; |
| | | import { useDownload } from '@/hooks/business/download'; |
| | | import { defaultTransform, useNaivePaginatedTable, useTableOperate } from '@/hooks/common/table'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import MatcheckOperateDrawer from './modules/matcheck-operate-drawer.vue'; |
| | | import { useRoute } from 'vue-router'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatcheckList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const route = useRoute(); |
| | | function getSingleQueryValue(query: string | string[] | null | undefined) { |
| | | if (Array.isArray(query)) return query[0] || ''; |
| | | return query || ''; |
| | | } |
| | | |
| | | const judgeCode = getSingleQueryValue(route.query.judgeCode); |
| | | const batchCode = getSingleQueryValue(route.query.batchCode); |
| | | const matCode = getSingleQueryValue(route.query.matCode); |
| | | |
| | | const searchParams = ref<Api.Qm.MatcheckSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | batchCode, |
| | | judgeCode, |
| | | matCode, |
| | | checkName: null, |
| | | checkTime: null, |
| | | reviewName: null, |
| | | reviewTiem: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetQmMatcheckList(searchParams.value), |
| | | transform: response => defaultTransform(response), |
| | | onPaginationParamsChange: params => { |
| | | searchParams.value.pageNum = params.page; |
| | | searchParams.value.pageSize = params.pageSize; |
| | | }, |
| | | columns: () => [ |
| | | { |
| | | type: 'selection', |
| | | align: 'center', |
| | | width: 48 |
| | | }, |
| | | { |
| | | key: 'index', |
| | | title: $t('common.index'), |
| | | align: 'center', |
| | | width: 64, |
| | | render: (_, index) => index + 1 |
| | | }, |
| | | { |
| | | key: 'itemName', |
| | | title: 'æ£éªé¡¹', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'maxval', |
| | | title: 'æå¤§å¼/çä¸è´¨é(嫿«ç)', |
| | | align: 'center', |
| | | minWidth: 170 |
| | | }, |
| | | { |
| | | key: 'minval', |
| | | title: 'æå°å¼/çæ«è´¨é(嫿«ç)', |
| | | align: 'center', |
| | | minWidth: 170 |
| | | }, |
| | | { |
| | | key: 'avgval', |
| | | title: 'å¹³åå¼/嫿«ç', |
| | | align: 'center', |
| | | minWidth: 130 |
| | | }, |
| | | { |
| | | key: 'sdval', |
| | | title: 'SDå¼', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'cvval', |
| | | title: 'CVå¼', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'cpkval', |
| | | title: 'CPKå¼', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'badval', |
| | | title: 'è¶
æ æ°', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'checker', |
| | | title: 'æ£éªå', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'checkTime', |
| | | title: 'æ£éªæ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'reviewName', |
| | | title: '夿£å', |
| | | align: 'center', |
| | | minWidth: 100 |
| | | }, |
| | | { |
| | | key: 'reviewTime', |
| | | title: '夿£æ¶é´', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'chkDes', |
| | | title: 'æè¿°', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | fixed: 'right', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('qm:matcheck:edit') || !hasAuth('qm:matcheck:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('qm:matcheck:edit')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="primary" |
| | | icon="material-symbols:drive-file-rename-outline-outline" |
| | | tooltipContent={$t('common.edit')} |
| | | onClick={() => edit(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | const deleteBtn = () => { |
| | | if (!hasAuth('qm:matcheck:remove')) { |
| | | return null; |
| | | } |
| | | return ( |
| | | <ButtonIcon |
| | | text |
| | | type="error" |
| | | icon="material-symbols:delete-outline" |
| | | tooltipContent={$t('common.delete')} |
| | | popconfirmContent={$t('common.confirmDelete')} |
| | | onPositiveClick={() => handleDelete(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | return ( |
| | | <div class="flex-center gap-8px"> |
| | | {editBtn()} |
| | | {divider()} |
| | | {deleteBtn()} |
| | | </div> |
| | | ); |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | const { drawerVisible, operateType, editingData, handleAdd, handleEdit, checkedRowKeys, onBatchDeleted, onDeleted } = |
| | | useTableOperate(data, 'id', getData); |
| | | |
| | | async function handleBatchDelete() { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMatcheck(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteMatcheck([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/qm/matcheck/export', searchParams.value, `æææ£éªç»è®¡_${new Date().getTime()}.xlsx`); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="min-h-500px flex-col-stretch gap-16px overflow-hidden lt-sm:overflow-auto"> |
| | | <NCard title="æææ£éªç»è®¡å表" :bordered="false" size="small" class="card-wrapper sm:flex-1-hidden"> |
| | | <template #header-extra> |
| | | <TableHeaderOperation |
| | | v-model:columns="columnChecks" |
| | | :disabled-delete="checkedRowKeys.length === 0" |
| | | :loading="loading" |
| | | :show-add="hasAuth('qm:matcheck:add')" |
| | | :show-delete="hasAuth('qm:matcheck:remove')" |
| | | :show-export="hasAuth('qm:matcheck:export')" |
| | | @add="handleAdd" |
| | | @delete="handleBatchDelete" |
| | | @export="handleExport" |
| | | @refresh="getData" |
| | | /> |
| | | </template> |
| | | <NDataTable |
| | | v-model:checked-row-keys="checkedRowKeys" |
| | | :columns="columns" |
| | | :data="data" |
| | | size="small" |
| | | :flex-height="!appStore.isMobile" |
| | | :scroll-x="scrollX" |
| | | :loading="loading" |
| | | remote |
| | | :row-key="row => row.id" |
| | | :pagination="mobilePagination" |
| | | class="sm:h-full" |
| | | /> |
| | | <MatcheckOperateDrawer |
| | | v-model:visible="drawerVisible" |
| | | :operate-type="operateType" |
| | | :row-data="editingData" |
| | | @submitted="getDataByPage" |
| | | /> |
| | | </NCard> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped></style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, onMounted, ref, watch } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateMatcheck, fetchUpdateMatcheck, fetchCheckItemList } from '@/service/api/qm/matcheck'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | import { useRoute } from 'vue-router'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatcheckOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Qm.Matcheck | null; |
| | | } |
| | | |
| | | const props = defineProps<Props>(); |
| | | |
| | | interface Emits { |
| | | (e: 'submitted'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const visible = defineModel<boolean>('visible', { |
| | | default: false |
| | | }); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | const { createRequiredRule } = useFormRules(); |
| | | const route = useRoute(); |
| | | |
| | | // æ£éªé¡¹é项 |
| | | const checkItemOptions = ref<CommonType.Option[]>([]); |
| | | |
| | | // è·åæ£éªé¡¹é项 |
| | | async function getCheckItemOptions() { |
| | | const judgeCode = Array.isArray(route.query.judgeCode) ? route.query.judgeCode[0] : route.query.judgeCode; |
| | | if (!judgeCode) { |
| | | checkItemOptions.value = []; |
| | | return; |
| | | } |
| | | |
| | | const { data, error } = await fetchCheckItemList({ judgeId: judgeCode }); |
| | | if (!error && data) { |
| | | checkItemOptions.value = data.map(item => ({ |
| | | label: item.itemName, // æ¥å£è¿åçåæ®µæ¯ item_name |
| | | value: item.itemCode // æ¥å£è¿åçåæ®µæ¯ item_code |
| | | })); |
| | | } |
| | | } |
| | | |
| | | const title = computed(() => { |
| | | const titles: Record<NaiveUI.TableOperateType, string> = { |
| | | add: 'æ°å¢æææ£éªç»è®¡', |
| | | edit: 'ç¼è¾æææ£éªç»è®¡' |
| | | }; |
| | | return titles[props.operateType]; |
| | | }); |
| | | |
| | | type Model = Api.Qm.MatcheckOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | const generateDetailsChecked = computed<string | number | boolean | undefined>({ |
| | | get() { |
| | | return model.value.generateDetails ?? '0'; |
| | | }, |
| | | set(value) { |
| | | model.value.generateDetails = String(value ?? '0'); |
| | | } |
| | | }); |
| | | |
| | | |
| | | function createDefaultModel(): Model { |
| | | // è·åå½åæ¥æï¼æ ¼å¼ä¸º yyyy-MM-dd |
| | | const today = new Date().toISOString().split('T')[0]; |
| | | const matCode = (route.query.matCode as string) || ''; |
| | | |
| | | return { |
| | | id: '', |
| | | pid: '', |
| | | batchCode: route.query.batchCode as string || '', |
| | | matCode, |
| | | instrumentCode: '', |
| | | techReq: '', |
| | | checkStd: '', |
| | | testEnv: '', |
| | | itemCode: '', |
| | | subBatchCode: '', |
| | | sampleNumber: null, |
| | | sampleType: null, |
| | | checkName: '', |
| | | checkTime: today, |
| | | reviewName: '', |
| | | reviewTime: null, |
| | | maxval: null, |
| | | minval: null, |
| | | avgval: null, |
| | | sdval: null, |
| | | cvval: null, |
| | | cpkval: null, |
| | | badval: null, |
| | | judge: '', |
| | | singlejudge: '', |
| | | verName: '', |
| | | verCode: '', |
| | | archDate: '', |
| | | del: null, |
| | | flag: '', |
| | | toMesTime: null, |
| | | chkDes: '', |
| | | generateDetails: '0' |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | id: createRequiredRule('主é®ï¼ç¼ç ä¸è½ä¸ºç©º'), |
| | | }; |
| | | |
| | | function handleUpdateModelWhenEdit() { |
| | | model.value = createDefaultModel(); |
| | | |
| | | if (props.operateType === 'edit' && props.rowData) { |
| | | Object.assign(model.value, jsonClone(props.rowData)); |
| | | model.value.generateDetails = model.value.generateDetails ?? '0'; |
| | | } |
| | | } |
| | | |
| | | function closeDrawer() { |
| | | visible.value = false; |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | await validate(); |
| | | |
| | | const { id, pid, batchCode, matCode, instrumentCode, techReq, checkStd, testEnv, itemCode, subBatchCode, sampleNumber, sampleType, checkName, checkTime, reviewName, reviewTime, maxval, minval, avgval, sdval, cvval, cpkval, badval, judge, singlejudge, verName, verCode, archDate, del, flag, toMesTime, chkDes, generateDetails } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateMatcheck({ id, pid, batchCode, matCode, instrumentCode, techReq, checkStd, testEnv, itemCode, subBatchCode, sampleNumber, sampleType, checkName, checkTime, reviewName, reviewTime, maxval, minval, avgval, sdval, cvval, cpkval, badval, judge, singlejudge, verName, verCode, archDate, del, flag, toMesTime, chkDes, generateDetails }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateMatcheck({ id, pid, batchCode, matCode, instrumentCode, techReq, checkStd, testEnv, itemCode, subBatchCode, sampleNumber, sampleType, checkName, checkTime, reviewName, reviewTime, maxval, minval, avgval, sdval, cvval, cpkval, badval, judge, singlejudge, verName, verCode, archDate, del, flag, toMesTime, chkDes, generateDetails }); |
| | | if (error) return; |
| | | } |
| | | |
| | | window.$message?.success($t('common.updateSuccess')); |
| | | closeDrawer(); |
| | | emit('submitted'); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getCheckItemOptions(); |
| | | }); |
| | | |
| | | watch(visible, () => { |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | getCheckItemOptions(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <template> |
| | | <NDrawer v-model:show="visible" :title="title" display-directive="show" :width="800" class="max-w-90%"> |
| | | <NDrawerContent :title="title" :native-scrollbar="false" closable> |
| | | <NForm ref="formRef" :model="model" :rules="rules" label-placement="left" :label-width="180"> |
| | | <NFormItem label="æ¹æ¬¡å·" path="batchCode"> |
| | | <NInput v-model:value="model.batchCode" placeholder="æ¹æ¬¡å·" :disabled="true" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ£éªé¡¹" path="itemCode"> |
| | | <NSelect |
| | | v-model:value="model.itemCode" |
| | | placeholder="è¯·éæ©æ£éªé¡¹" |
| | | :options="checkItemOptions" |
| | | clearable |
| | | filterable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="çå·" path="subBatchCode"> |
| | | <NInput v-model:value="model.subBatchCode" placeholder="请è¾å
¥çå·" /> |
| | | </NFormItem> |
| | | <NFormItem path="maxval"> |
| | | <template #label> |
| | | æå¤§å¼/<br> |
| | | çä¸è´¨é/<br> |
| | | (嫿«ç) |
| | | </template> |
| | | <NInputNumber v-model:value="model.maxval" placeholder="请è¾å
¥æå¤§å¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem path="minval"> |
| | | <template #label> |
| | | æå°å¼/<br> |
| | | çæ«è´¨é/<br> |
| | | (嫿«ç) |
| | | </template> |
| | | <NInputNumber v-model:value="model.minval" placeholder="请è¾å
¥æå°å¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem path="avgval"> |
| | | <template #label> |
| | | å¹³åå¼/<br> |
| | | 嫿«ç |
| | | </template> |
| | | <NInputNumber v-model:value="model.avgval" placeholder="请è¾å
¥å¹³åå¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem label="SDå¼" path="sdval"> |
| | | <NInputNumber v-model:value="model.sdval" placeholder="请è¾å
¥SDå¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem label="CVå¼" path="cvval"> |
| | | <NInputNumber v-model:value="model.cvval" placeholder="请è¾å
¥CVå¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem label="CPKå¼" path="cpkval"> |
| | | <NInputNumber v-model:value="model.cpkval" placeholder="请è¾å
¥CPKå¼" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem label="è¶
æ æ°" path="badval"> |
| | | <NInputNumber v-model:value="model.badval" placeholder="请è¾å
¥è¶
æ æ°" class="w-full" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ£éªæ¥æ" path="checkTime"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.checkTime" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®" path="judge"> |
| | | <NInput v-model:value="model.judge" placeholder="请è¾å
¥å¤å®" /> |
| | | </NFormItem> |
| | | <NFormItem label="å项å¤å®" path="singlejudge"> |
| | | <NInput v-model:value="model.singlejudge" placeholder="请è¾å
¥å项å¤å®" /> |
| | | </NFormItem> |
| | | <NFormItem label="æè¿°" path="chkDes"> |
| | | <NInput v-model:value="model.chkDes" placeholder="请è¾å
¥æè¿°" /> |
| | | </NFormItem> |
| | | <NFormItem label="çææç»" path="generateDetails"> |
| | | <NCheckbox v-model:checked="generateDetailsChecked" checked-value="1" unchecked-value="0" /> |
| | | </NFormItem> |
| | | </NForm> |
| | | <template #footer> |
| | | <NSpace :size="16"> |
| | | <NButton @click="closeDrawer">{{ $t('common.cancel') }}</NButton> |
| | | <NButton type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</NButton> |
| | | </NSpace> |
| | | </template> |
| | | </NDrawerContent> |
| | | </NDrawer> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .n-form-item-label { |
| | | white-space: pre-line; |
| | | line-height: 1.4; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { toRaw } from 'vue'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'MatcheckSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Qm.MatcheckSearchParams>('model', { required: true }); |
| | | |
| | | const defaultModel = jsonClone(toRaw(model.value)); |
| | | |
| | | function resetModel() { |
| | | Object.assign(model.value, defaultModel); |
| | | } |
| | | |
| | | async function reset() { |
| | | await restoreValidation(); |
| | | resetModel(); |
| | | emit('search'); |
| | | } |
| | | |
| | | async function search() { |
| | | await validate(); |
| | | emit('search'); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <NCard :bordered="false" size="small" class="card-wrapper"> |
| | | <NCollapse> |
| | | <NCollapseItem :title="$t('common.search')" name="qm-matcheck-search"> |
| | | <NForm ref="formRef" :model="model" label-placement="left" :label-width="80"> |
| | | <NGrid responsive="screen" item-responsive> |
| | | <NFormItemGi span="24 s:12 m:6" label="çå·" label-width="auto" path="matCode" class="pr-24px"> |
| | | <NInput v-model:value="model.matCode" placeholder="请è¾å
¥çå·" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="æ£éªå" label-width="auto" path="checkName" class="pr-24px"> |
| | | <NInput v-model:value="model.checkName" placeholder="请è¾å
¥æ£éªå" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="æ£éªæ¶é´" label-width="auto" path="checkTime" class="pr-24px"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.checkTime" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="夿 ¸å" label-width="auto" path="reviewName" class="pr-24px"> |
| | | <NInput v-model:value="model.reviewName" placeholder="请è¾å
¥å¤æ ¸å" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="夿 ¸æ¶é´" label-width="auto" path="reviewTiem" class="pr-24px"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.reviewTiem" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItemGi> |
| | | <NFormItemGi :show-feedback="false" span="24" class="pr-24px"> |
| | | <NSpace class="w-full" justify="end"> |
| | | <NButton @click="reset"> |
| | | <template #icon> |
| | | <icon-ic-round-refresh class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.reset') }} |
| | | </NButton> |
| | | <NButton type="primary" ghost @click="search"> |
| | | <template #icon> |
| | | <icon-ic-round-search class="text-icon" /> |
| | | </template> |
| | | {{ $t('common.search') }} |
| | | </NButton> |
| | | </NSpace> |
| | | </NFormItemGi> |
| | | </NGrid> |
| | | </NForm> |
| | | </NCollapseItem> |
| | | </NCollapse> |
| | | </NCard> |
| | | </template> |
| | | |
| | | <style scoped></style> |