feat: 基础数据仪器管理、判定依据、判定依据明细
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.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.qa.md.domain.vo.MdInstrumentVo; |
| | | import org.dromara.qa.md.domain.bo.MdInstrumentBo; |
| | | import org.dromara.qa.md.service.IMdInstrumentService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * æµéä»ªå¨ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/md/instrument") |
| | | public class MdInstrumentController extends BaseController { |
| | | |
| | | private final IMdInstrumentService mdInstrumentService; |
| | | |
| | | /** |
| | | * æ¥è¯¢æµé仪å¨å表 |
| | | */ |
| | | @SaCheckPermission("md:instrument:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<MdInstrumentVo> list(MdInstrumentBo bo, PageQuery pageQuery) { |
| | | return mdInstrumentService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * å¯¼åºæµé仪å¨å表 |
| | | */ |
| | | @SaCheckPermission("md:instrument:export") |
| | | @Log(title = "æµé仪å¨", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(MdInstrumentBo bo, HttpServletResponse response) { |
| | | List<MdInstrumentVo> list = mdInstrumentService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "æµé仪å¨", MdInstrumentVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åæµé仪å¨è¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("md:instrument:query") |
| | | @GetMapping("/{id}") |
| | | public R<MdInstrumentVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(mdInstrumentService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æµéä»ªå¨ |
| | | */ |
| | | @SaCheckPermission("md:instrument:add") |
| | | @Log(title = "æµé仪å¨", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody MdInstrumentBo bo) { |
| | | return toAjax(mdInstrumentService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æµéä»ªå¨ |
| | | */ |
| | | @SaCheckPermission("md:instrument:edit") |
| | | @Log(title = "æµé仪å¨", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody MdInstrumentBo bo) { |
| | | return toAjax(mdInstrumentService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å 餿µéä»ªå¨ |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("md:instrument:remove") |
| | | @Log(title = "æµé仪å¨", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(mdInstrumentService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.domain; |
| | | |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.io.Serial; |
| | | |
| | | /** |
| | | * æµé仪å¨å¯¹è±¡ md_instrument |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @TableName("md_instrument") |
| | | public class MdInstrument { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * 仪å¨ä»£ç |
| | | */ |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * 仪å¨åç§° |
| | | */ |
| | | private String instrumentName; |
| | | |
| | | /** |
| | | * æ¥å£æ å |
| | | */ |
| | | private String ifStd; |
| | | |
| | | /** |
| | | * æ¥å£æ å代ç |
| | | */ |
| | | private Long isc; |
| | | |
| | | /** |
| | | * æå±è½¦é´ |
| | | */ |
| | | private String workShop; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private Long del; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String instrumentDes; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.domain.bo; |
| | | |
| | | import org.dromara.qa.md.domain.MdInstrument; |
| | | 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.*; |
| | | |
| | | /** |
| | | * æµé仪å¨ä¸å¡å¯¹è±¡ md_instrument |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = MdInstrument.class, reverseConvertGenerate = false) |
| | | public class MdInstrumentBo extends BaseEntity { |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * 仪å¨ä»£ç |
| | | */ |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * 仪å¨åç§° |
| | | */ |
| | | private String instrumentName; |
| | | |
| | | /** |
| | | * æ¥å£æ å |
| | | */ |
| | | private String ifStd; |
| | | |
| | | /** |
| | | * æ¥å£æ å代ç |
| | | */ |
| | | private Long isc; |
| | | |
| | | /** |
| | | * æå±è½¦é´ |
| | | */ |
| | | private String workShop; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | private Long del; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String instrumentDes; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.domain.vo; |
| | | |
| | | import org.dromara.qa.md.domain.MdInstrument; |
| | | 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_instrument |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = MdInstrument.class) |
| | | public class MdInstrumentVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @ExcelProperty(value = "ç¼ç ") |
| | | private String id; |
| | | |
| | | /** |
| | | * 仪å¨ä»£ç |
| | | */ |
| | | @ExcelProperty(value = "仪å¨ä»£ç ") |
| | | private String instrumentCode; |
| | | |
| | | /** |
| | | * 仪å¨åç§° |
| | | */ |
| | | @ExcelProperty(value = "仪å¨åç§°") |
| | | private String instrumentName; |
| | | |
| | | /** |
| | | * æ¥å£æ å |
| | | */ |
| | | @ExcelProperty(value = "æ¥å£æ å") |
| | | private String ifStd; |
| | | |
| | | /** |
| | | * æ¥å£æ å代ç |
| | | */ |
| | | @ExcelProperty(value = "æ¥å£æ å代ç ") |
| | | private Long isc; |
| | | |
| | | /** |
| | | * æå±è½¦é´ |
| | | */ |
| | | @ExcelProperty(value = "æå±è½¦é´") |
| | | private String workShop; |
| | | |
| | | /** |
| | | * å¯ç¨ |
| | | */ |
| | | @ExcelProperty(value = "å¯ç¨", converter = ExcelDictConvert.class) |
| | | @ExcelDictFormat(dictType = "sys_yes_no") |
| | | private Long enable; |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | @ExcelProperty(value = "å é¤") |
| | | private Long del; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ExcelProperty(value = "夿³¨") |
| | | private String instrumentDes; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.mapper; |
| | | |
| | | import org.dromara.qa.md.domain.MdInstrument; |
| | | import org.dromara.qa.md.domain.vo.MdInstrumentVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * æµé仪å¨Mapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | public interface MdInstrumentMapper extends BaseMapperPlus<MdInstrument, MdInstrumentVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.service; |
| | | |
| | | import org.dromara.qa.md.domain.vo.MdInstrumentVo; |
| | | import org.dromara.qa.md.domain.bo.MdInstrumentBo; |
| | | 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-03-18 |
| | | */ |
| | | public interface IMdInstrumentService { |
| | | |
| | | /** |
| | | * æ¥è¯¢æµéä»ªå¨ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æµéä»ªå¨ |
| | | */ |
| | | MdInstrumentVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æµé仪å¨å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æµé仪å¨å页å表 |
| | | */ |
| | | TableDataInfo<MdInstrumentVo> queryPageList(MdInstrumentBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæµé仪å¨å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æµé仪å¨å表 |
| | | */ |
| | | List<MdInstrumentVo> queryList(MdInstrumentBo bo); |
| | | |
| | | /** |
| | | * æ°å¢æµéä»ªå¨ |
| | | * |
| | | * @param bo æµéä»ªå¨ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(MdInstrumentBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹æµéä»ªå¨ |
| | | * |
| | | * @param bo æµéä»ªå¨ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(MdInstrumentBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå 餿µé仪å¨ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.md.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.md.domain.bo.MdInstrumentBo; |
| | | import org.dromara.qa.md.domain.vo.MdInstrumentVo; |
| | | import org.dromara.qa.md.domain.MdInstrument; |
| | | import org.dromara.qa.md.mapper.MdInstrumentMapper; |
| | | import org.dromara.qa.md.service.IMdInstrumentService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * æµé仪å¨Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class MdInstrumentServiceImpl implements IMdInstrumentService { |
| | | |
| | | private final MdInstrumentMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢æµéä»ªå¨ |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return æµéä»ªå¨ |
| | | */ |
| | | @Override |
| | | public MdInstrumentVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢æµé仪å¨å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return æµé仪å¨å页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<MdInstrumentVo> queryPageList(MdInstrumentBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<MdInstrument> lqw = buildQueryWrapper(bo); |
| | | Page<MdInstrumentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çæµé仪å¨å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return æµé仪å¨å表 |
| | | */ |
| | | @Override |
| | | public List<MdInstrumentVo> queryList(MdInstrumentBo bo) { |
| | | LambdaQueryWrapper<MdInstrument> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<MdInstrument> buildQueryWrapper(MdInstrumentBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<MdInstrument> lqw = Wrappers.lambdaQuery(); |
| | | lqw.like(StringUtils.isNotBlank(bo.getInstrumentCode()), MdInstrument::getInstrumentCode, bo.getInstrumentCode()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getInstrumentName()), MdInstrument::getInstrumentName, bo.getInstrumentName()); |
| | | lqw.eq(bo.getEnable() != null, MdInstrument::getEnable, bo.getEnable()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æµéä»ªå¨ |
| | | * |
| | | * @param bo æµéä»ªå¨ |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(MdInstrumentBo bo) { |
| | | MdInstrument add = MapstructUtils.convert(bo, MdInstrument.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æµéä»ªå¨ |
| | | * |
| | | * @param bo æµéä»ªå¨ |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(MdInstrumentBo bo) { |
| | | MdInstrument update = MapstructUtils.convert(bo, MdInstrument.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(MdInstrument entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå 餿µé仪å¨ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.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.qa.qm.domain.vo.QmJudgeVo; |
| | | import org.dromara.qa.qm.domain.bo.QmJudgeBo; |
| | | import org.dromara.qa.qm.service.IQmJudgeService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ® |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/qm/judge") |
| | | public class QmJudgeController extends BaseController { |
| | | |
| | | private final IQmJudgeService qmJudgeService; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®ä¾æ®å表 |
| | | */ |
| | | @SaCheckPermission("qm:judge:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<QmJudgeVo> list(QmJudgeBo bo, PageQuery pageQuery) { |
| | | return qmJudgeService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * 导åºå¤å®ä¾æ®å表 |
| | | */ |
| | | @SaCheckPermission("qm:judge:export") |
| | | @Log(title = "å¤å®ä¾æ®", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(QmJudgeBo bo, HttpServletResponse response) { |
| | | List<QmJudgeVo> list = qmJudgeService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "å¤å®ä¾æ®", QmJudgeVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åå¤å®ä¾æ®è¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("qm:judge:query") |
| | | @GetMapping("/{id}") |
| | | public R<QmJudgeVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(qmJudgeService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢å¤å®ä¾æ® |
| | | */ |
| | | @SaCheckPermission("qm:judge:add") |
| | | @Log(title = "å¤å®ä¾æ®", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody QmJudgeBo bo) { |
| | | return toAjax(qmJudgeService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®ä¾æ® |
| | | */ |
| | | @SaCheckPermission("qm:judge:edit") |
| | | @Log(title = "å¤å®ä¾æ®", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody QmJudgeBo bo) { |
| | | return toAjax(qmJudgeService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å é¤å¤å®ä¾æ® |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("qm:judge:remove") |
| | | @Log(title = "å¤å®ä¾æ®", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(qmJudgeService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.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.qa.qm.domain.vo.QmJudgeDetailsVo; |
| | | import org.dromara.qa.qm.domain.bo.QmJudgeDetailsBo; |
| | | import org.dromara.qa.qm.service.IQmJudgeDetailsService; |
| | | import org.dromara.common.mybatis.core.page.TableDataInfo; |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | @Validated |
| | | @RequiredArgsConstructor |
| | | @RestController |
| | | @RequestMapping("/qm/judgeDetails") |
| | | public class QmJudgeDetailsController extends BaseController { |
| | | |
| | | private final IQmJudgeDetailsService qmJudgeDetailsService; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®æ¨¡æ¿æç»å表 |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:list") |
| | | @GetMapping("/list") |
| | | public TableDataInfo<QmJudgeDetailsVo> list(QmJudgeDetailsBo bo, PageQuery pageQuery) { |
| | | return qmJudgeDetailsService.queryPageList(bo, pageQuery); |
| | | } |
| | | |
| | | /** |
| | | * 导åºå¤å®æ¨¡æ¿æç»å表 |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:export") |
| | | @Log(title = "å¤å®æ¨¡æ¿æç»", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(QmJudgeDetailsBo bo, HttpServletResponse response) { |
| | | List<QmJudgeDetailsVo> list = qmJudgeDetailsService.queryList(bo); |
| | | ExcelUtil.exportExcel(list, "å¤å®æ¨¡æ¿æç»", QmJudgeDetailsVo.class, response); |
| | | } |
| | | |
| | | /** |
| | | * è·åå¤å®æ¨¡æ¿æç»è¯¦ç»ä¿¡æ¯ |
| | | * |
| | | * @param id ä¸»é® |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:query") |
| | | @GetMapping("/{id}") |
| | | public R<QmJudgeDetailsVo> getInfo(@NotNull(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String id) { |
| | | return R.ok(qmJudgeDetailsService.queryById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢å¤å®æ¨¡æ¿æç» |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:add") |
| | | @Log(title = "å¤å®æ¨¡æ¿æç»", businessType = BusinessType.INSERT) |
| | | @RepeatSubmit() |
| | | @PostMapping() |
| | | public R<Void> add(@Validated(AddGroup.class) @RequestBody QmJudgeDetailsBo bo) { |
| | | return toAjax(qmJudgeDetailsService.insertByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®æ¨¡æ¿æç» |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:edit") |
| | | @Log(title = "å¤å®æ¨¡æ¿æç»", businessType = BusinessType.UPDATE) |
| | | @RepeatSubmit() |
| | | @PutMapping() |
| | | public R<Void> edit(@Validated(EditGroup.class) @RequestBody QmJudgeDetailsBo bo) { |
| | | return toAjax(qmJudgeDetailsService.updateByBo(bo)); |
| | | } |
| | | |
| | | /** |
| | | * å é¤å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param ids 主é®ä¸² |
| | | */ |
| | | @SaCheckPermission("qm:judgeDetails:remove") |
| | | @Log(title = "å¤å®æ¨¡æ¿æç»", businessType = BusinessType.DELETE) |
| | | @DeleteMapping("/{ids}") |
| | | public R<Void> remove(@NotEmpty(message = "主é®ä¸è½ä¸ºç©º") |
| | | @PathVariable String[] ids) { |
| | | return toAjax(qmJudgeDetailsService.deleteWithValidByIds(List.of(ids), true)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.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; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®å¯¹è±¡ qm_judge |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @TableName("qm_judge") |
| | | public class QmJudge { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æçå·ä»£ç |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * ç©æçå· |
| | | */ |
| | | private String matName; |
| | | |
| | | /** |
| | | * çæ¬å· |
| | | */ |
| | | @Version |
| | | private Long version; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | */ |
| | | private Long status; |
| | | |
| | | /** |
| | | * å¤å®è§ç¨COD |
| | | */ |
| | | private String stdCod; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date cdate; |
| | | |
| | | /** |
| | | * çæäºº/æä½äººå |
| | | */ |
| | | private String oper; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | private Long category; |
| | | |
| | | /** |
| | | * è¾
æç±»åç¼ç |
| | | */ |
| | | private String typeCode; |
| | | |
| | | /** |
| | | * è¾
æç±»ååç§° |
| | | */ |
| | | private String typeName; |
| | | |
| | | /** |
| | | * å¤å®åç§° |
| | | */ |
| | | private String judgeName; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain; |
| | | |
| | | import org.dromara.common.mybatis.core.domain.BaseEntity; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.io.Serial; |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç»å¯¹è±¡ qm_judge_details |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @TableName("qm_judge_details") |
| | | public class QmJudgeDetails extends BaseEntity { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * å¤å®ä¸»æ è¯ |
| | | */ |
| | | private String judgeId; |
| | | |
| | | /** |
| | | * å¤å®é¡¹ITEM |
| | | */ |
| | | private String itemCod; |
| | | |
| | | /** |
| | | * å¤å®é¡¹NAME |
| | | */ |
| | | private String itemName; |
| | | |
| | | /** |
| | | * æ åå¼ |
| | | */ |
| | | private Long value3; |
| | | |
| | | /** |
| | | * å¤å®å¼1 |
| | | */ |
| | | private Long value1; |
| | | |
| | | /** |
| | | * å¤å®å¼2 |
| | | */ |
| | | private Long value2; |
| | | |
| | | /** |
| | | * 缺é·ä½ç½® |
| | | */ |
| | | private String location; |
| | | |
| | | /** |
| | | * å¤å®çº§å« (A,B,C,D) |
| | | */ |
| | | private String cls; |
| | | |
| | | /** |
| | | * å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å |
| | | */ |
| | | private Long stdscore; |
| | | |
| | | /** |
| | | * æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤åé¡¹ç® |
| | | */ |
| | | private Long ismix; |
| | | |
| | | /** |
| | | * è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项 |
| | | */ |
| | | private String rid; |
| | | |
| | | /** |
| | | * èå´-å¤ç¨ |
| | | */ |
| | | private Long category; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String decisionDes; |
| | | |
| | | /** |
| | | * ä¿®æ¹äºº |
| | | */ |
| | | private String updateUser; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.bo; |
| | | |
| | | import org.dromara.qa.qm.domain.QmJudge; |
| | | 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; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®ä¸å¡å¯¹è±¡ qm_judge |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = QmJudge.class, reverseConvertGenerate = false) |
| | | public class QmJudgeBo extends BaseEntity { |
| | | private String id; |
| | | /** |
| | | * ç©æçå·ä»£ç |
| | | */ |
| | | private String matCode; |
| | | |
| | | /** |
| | | * ç©æçå· |
| | | */ |
| | | private String matName; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | */ |
| | | private Long status; |
| | | |
| | | /** |
| | | * å¤å®è§ç¨COD |
| | | */ |
| | | private String stdCod; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date cdate; |
| | | |
| | | /** |
| | | * çæäºº/æä½äººå |
| | | */ |
| | | private String oper; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String des; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | private Long category; |
| | | |
| | | /** |
| | | * è¾
æç±»åç¼ç |
| | | */ |
| | | private String typeCode; |
| | | |
| | | /** |
| | | * è¾
æç±»ååç§° |
| | | */ |
| | | private String typeName; |
| | | |
| | | /** |
| | | * å¤å®åç§° |
| | | */ |
| | | private String judgeName; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.bo; |
| | | |
| | | import org.dromara.qa.qm.domain.QmJudgeDetails; |
| | | 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.*; |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç»ä¸å¡å¯¹è±¡ qm_judge_details |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @AutoMapper(target = QmJudgeDetails.class, reverseConvertGenerate = false) |
| | | public class QmJudgeDetailsBo extends BaseEntity { |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * å¤å®ä¸»æ è¯ |
| | | */ |
| | | private String judgeId; |
| | | |
| | | /** |
| | | * å¤å®é¡¹ITEM |
| | | */ |
| | | private String itemCod; |
| | | |
| | | /** |
| | | * å¤å®é¡¹NAME |
| | | */ |
| | | private String itemName; |
| | | |
| | | /** |
| | | * æ åå¼ |
| | | */ |
| | | private Long value3; |
| | | |
| | | /** |
| | | * å¤å®å¼1 |
| | | */ |
| | | private Long value1; |
| | | |
| | | /** |
| | | * å¤å®å¼2 |
| | | */ |
| | | private Long value2; |
| | | |
| | | /** |
| | | * 缺é·ä½ç½® |
| | | */ |
| | | private String location; |
| | | |
| | | /** |
| | | * å¤å®çº§å« (A,B,C,D) |
| | | */ |
| | | private String cls; |
| | | |
| | | /** |
| | | * å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å |
| | | */ |
| | | private Long stdscore; |
| | | |
| | | /** |
| | | * æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤åé¡¹ç® |
| | | */ |
| | | private Long ismix; |
| | | |
| | | /** |
| | | * è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项 |
| | | */ |
| | | private String rid; |
| | | |
| | | /** |
| | | * èå´-å¤ç¨ |
| | | */ |
| | | private Long category; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String decisionDes; |
| | | |
| | | /** |
| | | * ä¿®æ¹äºº |
| | | */ |
| | | private String updateUser; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.vo; |
| | | |
| | | import org.dromara.qa.qm.domain.QmJudgeDetails; |
| | | 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; |
| | | |
| | | |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç»è§å¾å¯¹è±¡ qm_judge_details |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = QmJudgeDetails.class) |
| | | public class QmJudgeDetailsVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * å¤å®ä¸»æ è¯ |
| | | */ |
| | | @ExcelProperty(value = "å¤å®ä¸»æ è¯") |
| | | private String judgeId; |
| | | |
| | | /** |
| | | * å¤å®é¡¹ITEM |
| | | */ |
| | | @ExcelProperty(value = "å¤å®é¡¹ITEM") |
| | | private String itemCod; |
| | | |
| | | /** |
| | | * å¤å®é¡¹NAME |
| | | */ |
| | | @ExcelProperty(value = "å¤å®é¡¹NAME") |
| | | private String itemName; |
| | | |
| | | /** |
| | | * æ åå¼ |
| | | */ |
| | | @ExcelProperty(value = "æ åå¼") |
| | | private Long value3; |
| | | |
| | | /** |
| | | * å¤å®å¼1 |
| | | */ |
| | | @ExcelProperty(value = "å¤å®å¼1") |
| | | private Long value1; |
| | | |
| | | /** |
| | | * å¤å®å¼2 |
| | | */ |
| | | @ExcelProperty(value = "å¤å®å¼2") |
| | | private Long value2; |
| | | |
| | | /** |
| | | * 缺é·ä½ç½® |
| | | */ |
| | | @ExcelProperty(value = "缺é·ä½ç½®") |
| | | private String location; |
| | | |
| | | /** |
| | | * å¤å®çº§å« (A,B,C,D) |
| | | */ |
| | | @ExcelProperty(value = "å¤å®çº§å« (A,B,C,D)") |
| | | private String cls; |
| | | |
| | | /** |
| | | * å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å |
| | | */ |
| | | @ExcelProperty(value = "å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å") |
| | | private Long stdscore; |
| | | |
| | | /** |
| | | * æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤åé¡¹ç® |
| | | */ |
| | | @ExcelProperty(value = "æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®") |
| | | private Long ismix; |
| | | |
| | | /** |
| | | * è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项 |
| | | */ |
| | | @ExcelProperty(value = "è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项") |
| | | private String rid; |
| | | |
| | | /** |
| | | * èå´-å¤ç¨ |
| | | */ |
| | | @ExcelProperty(value = "èå´-å¤ç¨") |
| | | private Long category; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ExcelProperty(value = "夿³¨") |
| | | private String decisionDes; |
| | | |
| | | /** |
| | | * ä¿®æ¹äºº |
| | | */ |
| | | @ExcelProperty(value = "ä¿®æ¹äºº") |
| | | private String updateUser; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.domain.vo; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import org.dromara.common.translation.annotation.Translation; |
| | | import org.dromara.common.translation.constant.TransConstant; |
| | | import org.dromara.qa.qm.domain.QmJudge; |
| | | 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; |
| | | |
| | | |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®è§å¾å¯¹è±¡ qm_judge |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | @AutoMapper(target = QmJudge.class) |
| | | public class QmJudgeVo implements Serializable { |
| | | |
| | | @Serial |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ç¼ç |
| | | */ |
| | | @ExcelProperty(value = "ç¼ç ") |
| | | private String id; |
| | | |
| | | /** |
| | | * ç©æçå·ä»£ç |
| | | */ |
| | | @ExcelProperty(value = "ç©æçå·ä»£ç ") |
| | | private String matCode; |
| | | |
| | | /** |
| | | * ç©æçå· |
| | | */ |
| | | @ExcelProperty(value = "ç©æçå·") |
| | | private String matName; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | */ |
| | | @ExcelProperty(value = "ç¶æ") |
| | | private Long status; |
| | | |
| | | /** |
| | | * å¤å®è§ç¨COD |
| | | */ |
| | | @ExcelProperty(value = "å¤å®è§ç¨COD") |
| | | private String stdCod; |
| | | |
| | | /** |
| | | * å¤å®è§ç¨åç§° |
| | | */ |
| | | @ExcelProperty(value = "å¤å®è§ç¨åç§°") |
| | | private String stdName; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @ExcelProperty(value = "å建æ¶é´") |
| | | private Date cdate; |
| | | |
| | | /** |
| | | * çæäºº/æä½äººå |
| | | */ |
| | | @ExcelProperty(value = "çæäºº/æä½äººå") |
| | | private String oper; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | @ExcelProperty(value = "夿³¨") |
| | | private String des; |
| | | |
| | | /** |
| | | * ç©æç±»å |
| | | */ |
| | | @ExcelProperty(value = "ç©æç±»å") |
| | | private Long category; |
| | | |
| | | /** |
| | | * è¾
æç±»åç¼ç |
| | | */ |
| | | @ExcelProperty(value = "è¾
æç±»åç¼ç ") |
| | | private String typeCode; |
| | | |
| | | /** |
| | | * è¾
æç±»ååç§° |
| | | */ |
| | | @ExcelProperty(value = "è¾
æç±»ååç§°") |
| | | private String typeName; |
| | | |
| | | /** |
| | | * å¤å®åç§° |
| | | */ |
| | | @ExcelProperty(value = "å¤å®åç§°") |
| | | private String judgeName; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.mapper; |
| | | |
| | | import org.dromara.qa.qm.domain.QmJudgeDetails; |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeDetailsVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç»Mapperæ¥å£ |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | public interface QmJudgeDetailsMapper extends BaseMapperPlus<QmJudgeDetails, QmJudgeDetailsVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.mapper; |
| | | |
| | | import org.dromara.qa.qm.domain.QmJudge; |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeVo; |
| | | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®Mapperæ¥å£ |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | public interface QmJudgeMapper extends BaseMapperPlus<QmJudge, QmJudgeVo> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.service; |
| | | |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeDetailsVo; |
| | | import org.dromara.qa.qm.domain.bo.QmJudgeDetailsBo; |
| | | 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 æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | public interface IQmJudgeDetailsService { |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return å¤å®æ¨¡æ¿æç» |
| | | */ |
| | | QmJudgeDetailsVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢å¤å®æ¨¡æ¿æç»å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return å¤å®æ¨¡æ¿æç»å页å表 |
| | | */ |
| | | TableDataInfo<QmJudgeDetailsVo> queryPageList(QmJudgeDetailsBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çå¤å®æ¨¡æ¿æç»å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return å¤å®æ¨¡æ¿æç»å表 |
| | | */ |
| | | List<QmJudgeDetailsVo> queryList(QmJudgeDetailsBo bo); |
| | | |
| | | /** |
| | | * æ°å¢å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param bo å¤å®æ¨¡æ¿æç» |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(QmJudgeDetailsBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param bo å¤å®æ¨¡æ¿æç» |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(QmJudgeDetailsBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤å¤å®æ¨¡æ¿æç»ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.qa.qm.service; |
| | | |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeVo; |
| | | import org.dromara.qa.qm.domain.bo.QmJudgeBo; |
| | | 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-03-18 |
| | | */ |
| | | public interface IQmJudgeService { |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®ä¾æ® |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return å¤å®ä¾æ® |
| | | */ |
| | | QmJudgeVo queryById(String id); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢å¤å®ä¾æ®å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return å¤å®ä¾æ®å页å表 |
| | | */ |
| | | TableDataInfo<QmJudgeVo> queryPageList(QmJudgeBo bo, PageQuery pageQuery); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çå¤å®ä¾æ®å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return å¤å®ä¾æ®å表 |
| | | */ |
| | | List<QmJudgeVo> queryList(QmJudgeBo bo); |
| | | |
| | | /** |
| | | * æ°å¢å¤å®ä¾æ® |
| | | * |
| | | * @param bo å¤å®ä¾æ® |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | Boolean insertByBo(QmJudgeBo bo); |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®ä¾æ® |
| | | * |
| | | * @param bo å¤å®ä¾æ® |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | Boolean updateByBo(QmJudgeBo bo); |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤å¤å®ä¾æ®ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.QmJudgeDetailsBo; |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeDetailsVo; |
| | | import org.dromara.qa.qm.domain.QmJudgeDetails; |
| | | import org.dromara.qa.qm.mapper.QmJudgeDetailsMapper; |
| | | import org.dromara.qa.qm.service.IQmJudgeDetailsService; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * å¤å®æ¨¡æ¿æç»Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author æ±æ¡é£ |
| | | * @date 2026-03-20 |
| | | */ |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class QmJudgeDetailsServiceImpl implements IQmJudgeDetailsService { |
| | | |
| | | private final QmJudgeDetailsMapper baseMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return å¤å®æ¨¡æ¿æç» |
| | | */ |
| | | @Override |
| | | public QmJudgeDetailsVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢å¤å®æ¨¡æ¿æç»å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return å¤å®æ¨¡æ¿æç»å页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<QmJudgeDetailsVo> queryPageList(QmJudgeDetailsBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<QmJudgeDetails> lqw = buildQueryWrapper(bo); |
| | | Page<QmJudgeDetailsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çå¤å®æ¨¡æ¿æç»å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return å¤å®æ¨¡æ¿æç»å表 |
| | | */ |
| | | @Override |
| | | public List<QmJudgeDetailsVo> queryList(QmJudgeDetailsBo bo) { |
| | | LambdaQueryWrapper<QmJudgeDetails> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<QmJudgeDetails> buildQueryWrapper(QmJudgeDetailsBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<QmJudgeDetails> lqw = Wrappers.lambdaQuery(); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getJudgeId()), QmJudgeDetails::getJudgeId, bo.getJudgeId()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getItemCod()), QmJudgeDetails::getItemCod, bo.getItemCod()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getItemName()), QmJudgeDetails::getItemName, bo.getItemName()); |
| | | lqw.eq(StringUtils.isNotBlank(bo.getCls()), QmJudgeDetails::getCls, bo.getCls()); |
| | | lqw.eq(bo.getIsmix() != null, QmJudgeDetails::getIsmix, bo.getIsmix()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param bo å¤å®æ¨¡æ¿æç» |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(QmJudgeDetailsBo bo) { |
| | | QmJudgeDetails add = MapstructUtils.convert(bo, QmJudgeDetails.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®æ¨¡æ¿æç» |
| | | * |
| | | * @param bo å¤å®æ¨¡æ¿æç» |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(QmJudgeDetailsBo bo) { |
| | | QmJudgeDetails update = MapstructUtils.convert(bo, QmJudgeDetails.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(QmJudgeDetails entity){ |
| | | //TODO åä¸äºæ°æ®æ ¡éª,å¦å¯ä¸çº¦æ |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¹¶æ¹éå é¤å¤å®æ¨¡æ¿æç»ä¿¡æ¯ |
| | | * |
| | | * @param ids å¾
å é¤ç主é®éå |
| | | * @param isValid æ¯å¦è¿è¡æææ§æ ¡éª |
| | | * @return æ¯å¦å 餿å |
| | | */ |
| | | @Override |
| | | public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) { |
| | | if(isValid){ |
| | | //TODO åä¸äºä¸å¡ä¸çæ ¡éª,夿æ¯å¦éè¦æ ¡éª |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.dromara.qa.qm.domain.QmStd; |
| | | import org.springframework.stereotype.Service; |
| | | import org.dromara.qa.qm.domain.bo.QmJudgeBo; |
| | | import org.dromara.qa.qm.domain.vo.QmJudgeVo; |
| | | import org.dromara.qa.qm.domain.QmJudge; |
| | | import org.dromara.qa.qm.mapper.QmJudgeMapper; |
| | | import org.dromara.qa.qm.service.IQmJudgeService; |
| | | import org.dromara.qa.qm.service.IQmStdService; |
| | | import org.dromara.qa.qm.mapper.QmStdMapper; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Collection; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | import java.util.HashMap; |
| | | |
| | | /** |
| | | * å¤å®ä¾æ®Serviceä¸å¡å±å¤ç |
| | | * |
| | | * @author zhuguifei |
| | | * @date 2026-03-18 |
| | | */ |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Service |
| | | public class QmJudgeServiceImpl implements IQmJudgeService { |
| | | |
| | | private final QmJudgeMapper baseMapper; |
| | | private final QmStdMapper qmStdMapper; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤å®ä¾æ® |
| | | * |
| | | * @param id ä¸»é® |
| | | * @return å¤å®ä¾æ® |
| | | */ |
| | | @Override |
| | | public QmJudgeVo queryById(String id){ |
| | | return baseMapper.selectVoById(id); |
| | | } |
| | | |
| | | /** |
| | | * å页æ¥è¯¢å¤å®ä¾æ®å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @param pageQuery å页忰 |
| | | * @return å¤å®ä¾æ®å页å表 |
| | | */ |
| | | @Override |
| | | public TableDataInfo<QmJudgeVo> queryPageList(QmJudgeBo bo, PageQuery pageQuery) { |
| | | LambdaQueryWrapper<QmJudge> lqw = buildQueryWrapper(bo); |
| | | Page<QmJudgeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | queryQmStd(result); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | private void queryQmStd(Page<QmJudgeVo> result) { |
| | | if (result == null || result.getRecords() == null || result.getRecords().isEmpty()) { |
| | | return; |
| | | } |
| | | List<QmJudgeVo> records = result.getRecords(); |
| | | |
| | | // 1. Collect all unique stdCode values |
| | | Set<String> stdCodes = records.stream() |
| | | .map(QmJudgeVo::getStdCod) |
| | | .filter(StringUtils::isNotBlank) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | if (stdCodes.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | // 2. Query QmStd entities based on the collected stdCode values |
| | | LambdaQueryWrapper<QmStd> stdLqw = Wrappers.lambdaQuery(); |
| | | stdLqw.in(QmStd::getId, stdCodes); |
| | | List<QmStd> qmStds = qmStdMapper.selectList(stdLqw); |
| | | |
| | | // 3. Create a map from stdCode to stdName for easy lookup |
| | | Map<String, String> stdCodeToNameMap = qmStds.stream() |
| | | .collect(Collectors.toMap(QmStd::getId, QmStd::getStdName, (oldValue, newValue) -> oldValue)); |
| | | |
| | | // 4. Populate stdName for each QmJudgeVo |
| | | records.forEach(judgeVo -> |
| | | judgeVo.setStdName(stdCodeToNameMap.getOrDefault(judgeVo.getStdCod(), null)) |
| | | ); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¬¦åæ¡ä»¶çå¤å®ä¾æ®å表 |
| | | * |
| | | * @param bo æ¥è¯¢æ¡ä»¶ |
| | | * @return å¤å®ä¾æ®å表 |
| | | */ |
| | | @Override |
| | | public List<QmJudgeVo> queryList(QmJudgeBo bo) { |
| | | LambdaQueryWrapper<QmJudge> lqw = buildQueryWrapper(bo); |
| | | return baseMapper.selectVoList(lqw); |
| | | } |
| | | |
| | | private LambdaQueryWrapper<QmJudge> buildQueryWrapper(QmJudgeBo bo) { |
| | | Map<String, Object> params = bo.getParams(); |
| | | LambdaQueryWrapper<QmJudge> lqw = Wrappers.lambdaQuery(); |
| | | lqw.like(StringUtils.isNotBlank(bo.getMatCode()), QmJudge::getMatCode, bo.getMatCode()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getMatName()), QmJudge::getMatName, bo.getMatName()); |
| | | lqw.like(StringUtils.isNotBlank(bo.getJudgeName()), QmJudge::getJudgeName, bo.getJudgeName()); |
| | | lqw.eq(bo.getStatus()!=null,QmJudge::getStatus, bo.getStatus()); |
| | | lqw.eq(bo.getCategory()!=null,QmJudge::getCategory, bo.getCategory()); |
| | | return lqw; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢å¤å®ä¾æ® |
| | | * |
| | | * @param bo å¤å®ä¾æ® |
| | | * @return æ¯å¦æ°å¢æå |
| | | */ |
| | | @Override |
| | | public Boolean insertByBo(QmJudgeBo bo) { |
| | | QmJudge add = MapstructUtils.convert(bo, QmJudge.class); |
| | | validEntityBeforeSave(add); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (flag) { |
| | | bo.setId(add.getId()); |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹å¤å®ä¾æ® |
| | | * |
| | | * @param bo å¤å®ä¾æ® |
| | | * @return æ¯å¦ä¿®æ¹æå |
| | | */ |
| | | @Override |
| | | public Boolean updateByBo(QmJudgeBo bo) { |
| | | QmJudge update = MapstructUtils.convert(bo, QmJudge.class); |
| | | validEntityBeforeSave(update); |
| | | return baseMapper.updateById(update) > 0; |
| | | } |
| | | |
| | | /** |
| | | * ä¿ååçæ°æ®æ ¡éª |
| | | */ |
| | | private void validEntityBeforeSave(QmJudge 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.md.mapper.MdInstrumentMapper"> |
| | | </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.qa.qm.mapper.QmJudgeDetailsMapper"> |
| | | </mapper> |
| | |
| | | yarn.lock |
| | | |
| | | .VSCodeCounter |
| | | |
| | | /pms/ |
| | |
| | | demo_demo: () => import("@/views/demo/demo/index.vue"), |
| | | demo_tree: () => import("@/views/demo/tree/index.vue"), |
| | | home: () => import("@/views/home/index.vue"), |
| | | md_instrument: () => import("@/views/md/instrument/index.vue"), |
| | | md_shift: () => import("@/views/md/shift/index.vue"), |
| | | monitor_cache: () => import("@/views/monitor/cache/index.vue"), |
| | | monitor_logininfor: () => import("@/views/monitor/logininfor/index.vue"), |
| | | monitor_online: () => import("@/views/monitor/online/index.vue"), |
| | | monitor_operlog: () => import("@/views/monitor/operlog/index.vue"), |
| | | qm_batch: () => import("@/views/qm/batch/index.vue"), |
| | | "qm_judge-details": () => import("@/views/qm/judge-details/index.vue"), |
| | | qm_judge: () => import("@/views/qm/judge/index.vue"), |
| | | qm_std: () => import("@/views/qm/std/index.vue"), |
| | | report_demo: () => import("@/views/report/demo/index.vue"), |
| | | "report_silk-storage-output": () => import("@/views/report/silk-storage-output/index.vue"), |
| | |
| | | }, |
| | | children: [ |
| | | { |
| | | name: 'md_instrument', |
| | | path: '/md/instrument', |
| | | component: 'view.md_instrument', |
| | | meta: { |
| | | title: 'md_instrument', |
| | | i18nKey: 'route.md_instrument' |
| | | } |
| | | }, |
| | | { |
| | | name: 'md_shift', |
| | | path: '/md/shift', |
| | | component: 'view.md_shift', |
| | |
| | | } |
| | | }, |
| | | { |
| | | name: 'qm_judge', |
| | | path: '/qm/judge', |
| | | component: 'view.qm_judge', |
| | | meta: { |
| | | title: 'qm_judge', |
| | | i18nKey: 'route.qm_judge' |
| | | } |
| | | }, |
| | | { |
| | | name: 'qm_judge-details', |
| | | path: '/qm/judge-details', |
| | | component: 'view.qm_judge-details', |
| | | meta: { |
| | | title: 'qm_judge-details', |
| | | i18nKey: 'route.qm_judge-details' |
| | | } |
| | | }, |
| | | { |
| | | name: 'qm_std', |
| | | path: '/qm/std', |
| | | component: 'view.qm_std', |
| | |
| | | "iframe-page": "/iframe-page/:url", |
| | | "login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?", |
| | | "md": "/md", |
| | | "md_instrument": "/md/instrument", |
| | | "md_shift": "/md/shift", |
| | | "monitor": "/monitor", |
| | | "monitor_cache": "/monitor/cache", |
| | |
| | | "monitor_operlog": "/monitor/operlog", |
| | | "qm": "/qm", |
| | | "qm_batch": "/qm/batch", |
| | | "qm_judge": "/qm/judge", |
| | | "qm_judge-details": "/qm/judge-details", |
| | | "qm_std": "/qm/std", |
| | | "report": "/report", |
| | | "report_demo": "/report/demo", |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åæµé仪å¨å表 */ |
| | | export function fetchGetInstrumentList (params?: Api.Md.InstrumentSearchParams) { |
| | | return request<Api.Md.InstrumentList>({ |
| | | url: '/md/instrument/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢æµéä»ªå¨ */ |
| | | export function fetchCreateInstrument (data: Api.Md.InstrumentOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/instrument', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹æµéä»ªå¨ */ |
| | | export function fetchUpdateInstrument (data: Api.Md.InstrumentOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/md/instrument', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå 餿µéä»ªå¨ */ |
| | | export function fetchBatchDeleteInstrument (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/md/instrument/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åå¤å®æ¨¡æ¿æç»å表 */ |
| | | export function fetchGetJudgeDetailsList (params?: Api.Qm.JudgeDetailsSearchParams) { |
| | | return request<Api.Qm.JudgeDetailsList>({ |
| | | url: '/qm/judgeDetails/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢å¤å®æ¨¡æ¿æç» */ |
| | | export function fetchCreateJudgeDetails (data: Api.Qm.JudgeDetailsOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/judgeDetails', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹å¤å®æ¨¡æ¿æç» */ |
| | | export function fetchUpdateJudgeDetails (data: Api.Qm.JudgeDetailsOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/judgeDetails', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå é¤å¤å®æ¨¡æ¿æç» */ |
| | | export function fetchBatchDeleteJudgeDetails (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/qm/judgeDetails/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from '@/service/request'; |
| | | |
| | | /** è·åå¤å®ä¾æ®å表 */ |
| | | export function fetchGetJudgeList (params?: Api.Qm.JudgeSearchParams) { |
| | | return request<Api.Qm.JudgeList>({ |
| | | url: '/qm/judge/list', |
| | | method: 'get', |
| | | params |
| | | }); |
| | | } |
| | | /** æ°å¢å¤å®ä¾æ® */ |
| | | export function fetchCreateJudge (data: Api.Qm.JudgeOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/judge', |
| | | method: 'post', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** ä¿®æ¹å¤å®ä¾æ® */ |
| | | export function fetchUpdateJudge (data: Api.Qm.JudgeOperateParams) { |
| | | return request<boolean>({ |
| | | url: '/qm/judge', |
| | | method: 'put', |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** æ¹éå é¤å¤å®ä¾æ® */ |
| | | export function fetchBatchDeleteJudge (ids: CommonType.IdType[]) { |
| | | return request<boolean>({ |
| | | url: `/qm/judge/${ids.join(',')}`, |
| | | method: 'delete' |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Md |
| | | * |
| | | * backend api module: "Md" |
| | | */ |
| | | namespace Md { |
| | | /** instrument */ |
| | | type Instrument = Common.CommonRecord<{ |
| | | /** ç¼ç */ |
| | | id: CommonType.IdType; |
| | | /** 仪å¨ä»£ç */ |
| | | instrumentCode: string; |
| | | /** 仪å¨åç§° */ |
| | | instrumentName: string; |
| | | /** æ¥å£æ å */ |
| | | ifStd: string; |
| | | /** æ¥å£æ å代ç */ |
| | | isc: number; |
| | | /** æå±è½¦é´ */ |
| | | workShop: string; |
| | | /** å¯ç¨ */ |
| | | enable: number; |
| | | /** å é¤ */ |
| | | del: number; |
| | | /** 夿³¨ */ |
| | | instrumentDes: string; |
| | | }>; |
| | | |
| | | /** instrument search params */ |
| | | type InstrumentSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.Instrument, |
| | | | 'instrumentCode' |
| | | | 'instrumentName' |
| | | | 'enable' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** instrument operate params */ |
| | | type InstrumentOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Md.Instrument, |
| | | | 'id' |
| | | | 'instrumentCode' |
| | | | 'instrumentName' |
| | | | 'ifStd' |
| | | | 'isc' |
| | | | 'workShop' |
| | | | 'enable' |
| | | | 'del' |
| | | | 'instrumentDes' |
| | | > |
| | | >; |
| | | |
| | | /** instrument list */ |
| | | type InstrumentList = Api.Common.PaginatingQueryRecord<Instrument>; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Qm |
| | | * |
| | | * backend api module: "Qm" |
| | | */ |
| | | namespace Qm { |
| | | /** judge details */ |
| | | type JudgeDetails = Common.CommonRecord<{ |
| | | /** ç¼ç */ |
| | | id: CommonType.IdType; |
| | | /** å¤å®ä¸»æ è¯ */ |
| | | judgeId: CommonType.IdType; |
| | | /** å¤å®é¡¹ITEM */ |
| | | itemCod: string; |
| | | /** å¤å®é¡¹NAME */ |
| | | itemName: string; |
| | | /** æ åå¼ */ |
| | | value3: number; |
| | | /** å¤å®å¼1 */ |
| | | value1: number; |
| | | /** å¤å®å¼2 */ |
| | | value2: number; |
| | | /** 缺é·ä½ç½® */ |
| | | location: string; |
| | | /** å¤å®çº§å« (A,B,C,D) */ |
| | | cls: string; |
| | | /** å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å */ |
| | | stdscore: number; |
| | | /** æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤åé¡¹ç® */ |
| | | ismix: number; |
| | | /** è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项 */ |
| | | rid: CommonType.IdType; |
| | | /** èå´-å¤ç¨ */ |
| | | category: number; |
| | | /** 夿³¨ */ |
| | | decisionDes: string; |
| | | /** ä¿®æ¹äºº */ |
| | | updateUser: string; |
| | | }>; |
| | | |
| | | /** judge details search params */ |
| | | type JudgeDetailsSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.JudgeDetails, |
| | | | 'judgeId' |
| | | | 'itemCod' |
| | | | 'itemName' |
| | | | 'cls' |
| | | | 'ismix' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** judge details operate params */ |
| | | type JudgeDetailsOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.JudgeDetails, |
| | | | 'id' |
| | | | 'judgeId' |
| | | | 'itemCod' |
| | | | 'itemName' |
| | | | 'value3' |
| | | | 'value1' |
| | | | 'value2' |
| | | | 'location' |
| | | | 'cls' |
| | | | 'stdscore' |
| | | | 'ismix' |
| | | | 'rid' |
| | | | 'category' |
| | | | 'decisionDes' |
| | | | 'updateUser' |
| | | > |
| | | >; |
| | | |
| | | /** judge details list */ |
| | | type JudgeDetailsList = Api.Common.PaginatingQueryRecord<JudgeDetails>; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * Namespace Api |
| | | * |
| | | * All backend api type |
| | | */ |
| | | declare namespace Api { |
| | | /** |
| | | * namespace Qm |
| | | * |
| | | * backend api module: "Qm" |
| | | */ |
| | | namespace Qm { |
| | | /** judge */ |
| | | type Judge = Common.CommonRecord<{ |
| | | /** ç¼ç */ |
| | | id: CommonType.IdType; |
| | | /** ç©æçå·ä»£ç */ |
| | | matCode: string; |
| | | /** ç©æçå· */ |
| | | matName: string; |
| | | /** çæ¬å· */ |
| | | version: number; |
| | | /** ç¶æ */ |
| | | status: number; |
| | | /** å¤å®è§ç¨COD */ |
| | | stdCod: string; |
| | | /** å建æ¶é´ */ |
| | | cdate: string; |
| | | /** çæäºº/æä½äººå */ |
| | | oper: string; |
| | | /** 夿³¨ */ |
| | | des: string; |
| | | /** ç©æç±»å */ |
| | | category: number; |
| | | /** è¾
æç±»åç¼ç */ |
| | | typeCode: string; |
| | | /** è¾
æç±»ååç§° */ |
| | | typeName: string; |
| | | /** å¤å®åç§° */ |
| | | judgeName: string; |
| | | }>; |
| | | |
| | | /** judge search params */ |
| | | type JudgeSearchParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Judge, |
| | | | 'matCode' |
| | | | 'matName' |
| | | | 'judgeName' |
| | | | 'category' |
| | | | 'status' |
| | | > & |
| | | Api.Common.CommonSearchParams |
| | | >; |
| | | |
| | | /** judge operate params */ |
| | | type JudgeOperateParams = CommonType.RecordNullable< |
| | | Pick< |
| | | Api.Qm.Judge, |
| | | | 'matCode' |
| | | | 'matName' |
| | | | 'status' |
| | | | 'stdCod' |
| | | | 'cdate' |
| | | | 'oper' |
| | | | 'des' |
| | | | 'category' |
| | | | 'typeCode' |
| | | | 'typeName' |
| | | | 'judgeName' |
| | | > |
| | | >; |
| | | |
| | | /** judge list */ |
| | | type JudgeList = Api.Common.PaginatingQueryRecord<Judge>; |
| | | } |
| | | } |
| | |
| | | "iframe-page": "/iframe-page/:url"; |
| | | "login": "/login/:module(pwd-login|code-login|register|reset-pwd|bind-wechat)?"; |
| | | "md": "/md"; |
| | | "md_instrument": "/md/instrument"; |
| | | "md_shift": "/md/shift"; |
| | | "monitor": "/monitor"; |
| | | "monitor_cache": "/monitor/cache"; |
| | |
| | | "monitor_operlog": "/monitor/operlog"; |
| | | "qm": "/qm"; |
| | | "qm_batch": "/qm/batch"; |
| | | "qm_judge": "/qm/judge"; |
| | | "qm_judge-details": "/qm/judge-details"; |
| | | "qm_std": "/qm/std"; |
| | | "report": "/report"; |
| | | "report_demo": "/report/demo"; |
| | |
| | | | "demo_demo" |
| | | | "demo_tree" |
| | | | "home" |
| | | | "md_instrument" |
| | | | "md_shift" |
| | | | "monitor_cache" |
| | | | "monitor_logininfor" |
| | | | "monitor_online" |
| | | | "monitor_operlog" |
| | | | "qm_batch" |
| | | | "qm_judge-details" |
| | | | "qm_judge" |
| | | | "qm_std" |
| | | | "report_demo" |
| | | | "report_silk-storage-output" |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { ref } from 'vue'; |
| | | import { NDivider, NTooltip } from 'naive-ui'; |
| | | import { fetchBatchDeleteInstrument, fetchGetInstrumentList } from '@/service/api/md/instrument'; |
| | | 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 { useDict } from '@/hooks/business/dict'; |
| | | import { $t } from '@/locales'; |
| | | import ButtonIcon from '@/components/custom/button-icon.vue'; |
| | | import InstrumentOperateDrawer from './modules/instrument-operate-drawer.vue'; |
| | | import InstrumentSearch from './modules/instrument-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'InstrumentList' |
| | | }); |
| | | |
| | | useDict('sys_yes_no'); |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const searchParams = ref<Api.Md.InstrumentSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | instrumentCode: null, |
| | | instrumentName: null, |
| | | enable: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetInstrumentList(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: 'instrumentCode', |
| | | title: '仪å¨ä»£ç ', |
| | | align: 'center', |
| | | width: 120 |
| | | }, |
| | | { |
| | | key: 'instrumentName', |
| | | title: '仪å¨åç§°', |
| | | align: 'center', |
| | | width: 200 |
| | | }, |
| | | { |
| | | key: 'ifStd', |
| | | title: 'æ¥å£æ å', |
| | | align: 'center', |
| | | width: 120 |
| | | }, |
| | | { |
| | | key: 'isc', |
| | | title: 'æ¥å£æ å代ç ', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'workShop', |
| | | title: 'æå±è½¦é´', |
| | | align: 'center', |
| | | width: 120 |
| | | }, |
| | | { |
| | | key: 'enable', |
| | | title: 'å¯ç¨', |
| | | align: 'center', |
| | | width: 120, |
| | | render(row) { |
| | | return <DictTag value={row.enable} dictCode="sys_yes_no" />; |
| | | } |
| | | }, |
| | | { |
| | | key: 'del', |
| | | title: 'å é¤', |
| | | align: 'center', |
| | | width: 120 |
| | | }, |
| | | { |
| | | key: 'instrumentDes', |
| | | title: '夿³¨', |
| | | align: 'center', |
| | | width: 300, |
| | | render: row => ( |
| | | <NTooltip trigger="hover"> |
| | | {{ |
| | | trigger: () => ( |
| | | <div |
| | | style={{ |
| | | whiteSpace: 'nowrap', |
| | | overflow: 'hidden', |
| | | textOverflow: 'ellipsis' |
| | | }} |
| | | > |
| | | {row.instrumentDes} |
| | | </div> |
| | | ), |
| | | default: () => row.instrumentDes |
| | | }} |
| | | </NTooltip> |
| | | ) |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('md:instrument:edit') || !hasAuth('md:instrument:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('md:instrument: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:instrument: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 fetchBatchDeleteInstrument(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteInstrument([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/md/instrument/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"> |
| | | <InstrumentSearch 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:instrument:add')" |
| | | :show-delete="hasAuth('md:instrument:remove')" |
| | | :show-export="hasAuth('md:instrument: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" |
| | | /> |
| | | <InstrumentOperateDrawer |
| | | 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 { NSelect } from 'naive-ui'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateInstrument, fetchUpdateInstrument } from '@/service/api/md/instrument'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'InstrumentOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Md.Instrument | 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]; |
| | | }); |
| | | |
| | | const enableOptions = [ |
| | | { label: 'å¯ç¨', value: 1 }, |
| | | { label: 'åç¨', value: 0 } |
| | | ]; |
| | | |
| | | const delOptions = [ |
| | | { label: 'æ£å¸¸', value: 0 }, |
| | | { label: 'å é¤', value: 1 } |
| | | ]; |
| | | |
| | | type Model = Api.Md.InstrumentOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | id: '', |
| | | instrumentCode: '', |
| | | instrumentName: '', |
| | | ifStd: '', |
| | | isc: null, |
| | | workShop: '', |
| | | enable: 1, |
| | | del: 0, |
| | | instrumentDes: '' |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract<keyof Model, 'id'>; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | id: createRequiredRule('udä¸è½ä¸ºç©º') |
| | | }; |
| | | |
| | | 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, instrumentCode, instrumentName, ifStd, isc, workShop, enable, del, instrumentDes } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateInstrument({ id, instrumentCode, instrumentName, ifStd, isc, workShop, enable, del, instrumentDes }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateInstrument({ id, instrumentCode, instrumentName, ifStd, isc, workShop, enable, del, instrumentDes }); |
| | | 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="instrumentCode"> |
| | | <NInput v-model:value="model.instrumentCode" placeholder="请è¾å
¥ä»ªå¨ä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="仪å¨åç§°" path="instrumentName"> |
| | | <NInput v-model:value="model.instrumentName" placeholder="请è¾å
¥ä»ªå¨åç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¥å£æ å" path="ifStd"> |
| | | <NInput v-model:value="model.ifStd" placeholder="请è¾å
¥æ¥å£æ å" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ¥å£æ å代ç " path="isc"> |
| | | <NInput v-model:value="model.isc" placeholder="请è¾å
¥æ¥å£æ å代ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="æå±è½¦é´" path="workShop"> |
| | | <NInput v-model:value="model.workShop" placeholder="请è¾å
¥æå±è½¦é´" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¯ç¨" path="enable"> |
| | | <NSelect v-model:value="model.enable as number" :options="enableOptions" placeholder="è¯·éæ©å¯ç¨" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="å é¤" path="del"> |
| | | <NSelect v-model:value="model.del as number" :options="delOptions" placeholder="è¯·éæ©å é¤" clearable /> |
| | | </NFormItem> |
| | | <NFormItem label="夿³¨" path="instrumentDes"> |
| | | <NInput v-model:value="model.instrumentDes" placeholder="请è¾å
¥å¤æ³¨" /> |
| | | </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: 'InstrumentSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Md.InstrumentSearchParams>('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-instrument-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="instrumentCode" class="pr-24px"> |
| | | <NInput v-model:value="model.instrumentCode" placeholder="请è¾å
¥ä»ªå¨ä»£ç " /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="仪å¨åç§°" label-width="auto" path="instrumentName" class="pr-24px"> |
| | | <NInput v-model:value="model.instrumentName" placeholder="请è¾å
¥ä»ªå¨åç§°" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¯ç¨" label-width="auto" path="enable" class="pr-24px"> |
| | | <DictSelect |
| | | v-model:value="model.enable" |
| | | placeholder="è¯·éæ©å¯ç¨" |
| | | dict-code="sys_yes_no" |
| | | 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> |
| | |
| | | fetchGetRid, |
| | | fetchUpdateCheckitem |
| | | } from '@/service/api/qm/checkitem'; |
| | | import { fetchGetInstrumentList } from '@/service/api/md/instrument'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | const ridOptions = ref<{ label: string; value: string | number }[]>([]); |
| | | const instrumentOptions = ref<{ label: string; value: string | number }[]>([]); |
| | | |
| | | async function fetchRidOptions(searchText?: string) { |
| | | const params: any = {}; |
| | |
| | | |
| | | function handleRidSelectSearch(query: string) { |
| | | fetchRidOptions(query); |
| | | } |
| | | |
| | | async function fetchInstrumentOptions(searchText?: string) { |
| | | const params: any = {}; |
| | | if (searchText) { |
| | | params.instrumentName = searchText; |
| | | } |
| | | const { data } = await fetchGetInstrumentList(params); |
| | | if (data && data.rows) { |
| | | instrumentOptions.value = data.rows.map(item => ({ |
| | | label: item.instrumentName, |
| | | value: item.instrumentCode |
| | | })); |
| | | } else { |
| | | instrumentOptions.value = []; |
| | | } |
| | | } |
| | | |
| | | function handleInstrumentSelectSearch(query: string) { |
| | | fetchInstrumentOptions(query); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | // Fetch options for rid |
| | | await fetchRidOptions(); |
| | | // Fetch options for instrument |
| | | await fetchInstrumentOptions(); |
| | | |
| | | if (props.operateType === 'add' && props.stdCode) { |
| | | model.value.stdCode = props.stdCode; |
| | |
| | | <NFormItem label="æ£éªé¡¹æè¿°" path="itemDes"> |
| | | <NInput v-model:value="model.itemDes" placeholder="请è¾å
¥æ£éªé¡¹æè¿°" /> |
| | | </NFormItem> |
| | | |
| | | <NFormItem label="æ£æµä»ªå¨" path="instrumentCode"> |
| | | <NSelect |
| | | v-model:value="model.instrumentCode" |
| | | :options="instrumentOptions" |
| | | placeholder="è¯·éæ©æ£æµä»ªå¨" |
| | | clearable |
| | | filterable |
| | | @search="handleInstrumentSelectSearch" |
| | | @focus="() => fetchInstrumentOptions()" |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="ä»ªå¨æè¿°" path="instrumentDes"> |
| | | <NInput v-model:value="model.instrumentDes" placeholder="请è¾å
¥ä»ªå¨æè¿°" /> |
| | | </NFormItem> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="tsx"> |
| | | import { ref } from 'vue'; |
| | | import { NDivider } from 'naive-ui'; |
| | | import { fetchBatchDeleteJudgeDetails, fetchGetJudgeDetailsList } from '@/service/api/qm/judge-details'; |
| | | 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 JudgeDetailsOperateDrawer from './modules/judge-details-operate-drawer.vue'; |
| | | import JudgeDetailsSearch from './modules/judge-details-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'JudgeDetailsList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const searchParams = ref<Api.Qm.JudgeDetailsSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | judgeId: null, |
| | | itemCod: null, |
| | | itemName: null, |
| | | cls: null, |
| | | ismix: null, |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => fetchGetJudgeDetailsList(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: 'judgeId', |
| | | title: 'å¤å®ä¸»æ è¯', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'itemCod', |
| | | title: 'å¤å®é¡¹ITEM', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'itemName', |
| | | title: 'å¤å®é¡¹NAME', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'value3', |
| | | title: 'æ åå¼', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'value1', |
| | | title: 'å¤å®å¼1', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'value2', |
| | | title: 'å¤å®å¼2', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'location', |
| | | title: '缺é·ä½ç½®', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'cls', |
| | | title: 'å¤å®çº§å« (A,B,C,D)', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'stdscore', |
| | | title: 'å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'ismix', |
| | | title: 'æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'rid', |
| | | title: 'è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'category', |
| | | title: 'èå´-å¤ç¨', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'decisionDes', |
| | | title: '夿³¨', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'updateUser', |
| | | title: 'ä¿®æ¹äºº', |
| | | align: 'center', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | width: 130, |
| | | render: row => { |
| | | 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={() => edit(row.id)} |
| | | /> |
| | | ); |
| | | }; |
| | | |
| | | 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> |
| | | ); |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | const { drawerVisible, operateType, editingData, handleAdd, handleEdit, checkedRowKeys, onBatchDeleted, onDeleted } = |
| | | useTableOperate(data, 'id', getData); |
| | | |
| | | async function handleBatchDelete() { |
| | | // request |
| | | const { error } = await fetchBatchDeleteJudgeDetails(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteJudgeDetails([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/qm/judgeDetails/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"> |
| | | <JudgeDetailsSearch 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('qm:judgeDetails:add')" |
| | | :show-delete="hasAuth('qm:judgeDetails:remove')" |
| | | :show-export="hasAuth('qm:judgeDetails: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" |
| | | /> |
| | | <JudgeDetailsOperateDrawer |
| | | 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 { fetchCreateJudgeDetails, fetchUpdateJudgeDetails } from '@/service/api/qm/judge-details'; |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'JudgeDetailsOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Qm.JudgeDetails | 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.Qm.JudgeDetailsOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | id: '', |
| | | judgeId: '', |
| | | itemCod: '', |
| | | itemName: '', |
| | | value3: null, |
| | | value1: null, |
| | | value2: null, |
| | | location: '', |
| | | cls: '', |
| | | stdscore: null, |
| | | ismix: null, |
| | | rid: '', |
| | | category: null, |
| | | decisionDes: '', |
| | | updateUser: '', |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | }; |
| | | |
| | | 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, judgeId, itemCod, itemName, value3, value1, value2, location, cls, stdscore, ismix, rid, category, decisionDes, updateUser } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateJudgeDetails({ id, judgeId, itemCod, itemName, value3, value1, value2, location, cls, stdscore, ismix, rid, category, decisionDes, updateUser }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateJudgeDetails({ id, judgeId, itemCod, itemName, value3, value1, value2, location, cls, stdscore, ismix, rid, category, decisionDes, updateUser }); |
| | | 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="id"> |
| | | <NInput v-model:value="model.id" placeholder="请è¾å
¥ç¼ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®ä¸»æ è¯" path="judgeId"> |
| | | <NInput v-model:value="model.judgeId" placeholder="请è¾å
¥å¤å®ä¸»æ è¯" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®é¡¹ITEM" path="itemCod"> |
| | | <NInput v-model:value="model.itemCod" placeholder="请è¾å
¥å¤å®é¡¹ITEM" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®é¡¹NAME" path="itemName"> |
| | | <NInput v-model:value="model.itemName" placeholder="请è¾å
¥å¤å®é¡¹NAME" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ åå¼" path="value3"> |
| | | <NInput v-model:value="model.value3" placeholder="请è¾å
¥æ åå¼" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®å¼1" path="value1"> |
| | | <NInput v-model:value="model.value1" placeholder="请è¾å
¥å¤å®å¼1" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®å¼2" path="value2"> |
| | | <NInput v-model:value="model.value2" placeholder="请è¾å
¥å¤å®å¼2" /> |
| | | </NFormItem> |
| | | <NFormItem label="缺é·ä½ç½®" path="location"> |
| | | <NInput v-model:value="model.location" placeholder="请è¾å
¥ç¼ºé·ä½ç½®" /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®çº§å« (A,B,C,D)" path="cls"> |
| | | <NInput v-model:value="model.cls" placeholder="请è¾å
¥å¤å®çº§å« (A,B,C,D)" /> |
| | | </NFormItem> |
| | | <NFormItem label="å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å" path="stdscore"> |
| | | <NInput v-model:value="model.stdscore" placeholder="请è¾å
¥å弿 å (æ£åæ åï¼å¾åæ å),æ¯å¦ä¸åæ ¼ä¸æ¬¡æ£å¤å°å" /> |
| | | </NFormItem> |
| | | <NFormItem label="æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®" path="ismix"> |
| | | <NInput v-model:value="model.ismix" placeholder="请è¾å
¥æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®" /> |
| | | </NFormItem> |
| | | <NFormItem label="è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项" path="rid"> |
| | | <NInput v-model:value="model.rid" placeholder="请è¾å
¥è¥æ¤å段æUUIDå¼ï¼è¡¨æå®å¯è½ä¸ºå
¶ä»é¡¹ç®çåé¡¹ï¼æ¯å¦â空头â,å®ä¸ºçæ¯å¤è§é¡¹ç®çå项" /> |
| | | </NFormItem> |
| | | <NFormItem label="èå´-å¤ç¨" path="category"> |
| | | <NInput v-model:value="model.category" placeholder="请è¾å
¥èå´-å¤ç¨" /> |
| | | </NFormItem> |
| | | <NFormItem label="夿³¨" path="decisionDes"> |
| | | <NInput v-model:value="model.decisionDes" placeholder="请è¾å
¥å¤æ³¨" /> |
| | | </NFormItem> |
| | | <NFormItem label="ä¿®æ¹äºº" path="updateUser"> |
| | | <NInput v-model:value="model.updateUser" placeholder="请è¾å
¥ä¿®æ¹äºº" /> |
| | | </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: 'JudgeDetailsSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Qm.JudgeDetailsSearchParams>('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-judge-details-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="judgeId" class="pr-24px"> |
| | | <NInput v-model:value="model.judgeId" placeholder="请è¾å
¥å¤å®ä¸»æ è¯" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¤å®é¡¹ITEM" label-width="auto" path="itemCod" class="pr-24px"> |
| | | <NInput v-model:value="model.itemCod" placeholder="请è¾å
¥å¤å®é¡¹ITEM" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¤å®é¡¹NAME" label-width="auto" path="itemName" class="pr-24px"> |
| | | <NInput v-model:value="model.itemName" placeholder="请è¾å
¥å¤å®é¡¹NAME" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¤å®çº§å« (A,B,C,D)" label-width="auto" path="cls" class="pr-24px"> |
| | | <NInput v-model:value="model.cls" placeholder="请è¾å
¥å¤å®çº§å« (A,B,C,D)" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®" label-width="auto" path="ismix" class="pr-24px"> |
| | | <NInput v-model:value="model.ismix" placeholder="请è¾å
¥æ è®°æ¤é¡¹æ¯å¦ä¸ºåæé¡¹ç®ï¼æ¯å¦å¤è§ï¼å®é
ä¸å
³èäºå¾å¤å项ç®" /> |
| | | </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 { ref } from 'vue'; |
| | | import { NDivider, NTooltip } from 'naive-ui'; |
| | | import { fetchBatchDeleteJudge, fetchGetJudgeList } from '@/service/api/qm/judge'; |
| | | 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 JudgeOperateDrawer from './modules/judge-operate-drawer.vue'; |
| | | import JudgeSearch from './modules/judge-search.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'JudgeList' |
| | | }); |
| | | |
| | | |
| | | const appStore = useAppStore(); |
| | | const { download } = useDownload(); |
| | | const { hasAuth } = useAuth(); |
| | | |
| | | const searchParams = ref<Api.Qm.JudgeSearchParams>({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | matCode: null, |
| | | matName: null, |
| | | judgeName: null, |
| | | category: 0, // é»è®¤éæ©æå |
| | | status: -1, // é»è®¤éæ©å
¨é¨ |
| | | params: {} |
| | | }); |
| | | |
| | | const { columns, columnChecks, data, getData, getDataByPage, loading, mobilePagination, scrollX } = |
| | | useNaivePaginatedTable({ |
| | | api: () => { |
| | | const params = { ...searchParams.value }; |
| | | if (params.status === -1) { |
| | | delete params.status; |
| | | } |
| | | return fetchGetJudgeList(params); |
| | | }, |
| | | 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: 'judgeName', |
| | | title: 'å¤å®åç§°', |
| | | align: 'center', |
| | | width: 200, |
| | | render: row => ( |
| | | <NTooltip trigger="hover"> |
| | | {{ |
| | | trigger: () => ( |
| | | <div |
| | | style={{ |
| | | whiteSpace: 'nowrap', |
| | | overflow: 'hidden', |
| | | textOverflow: 'ellipsis' |
| | | }} |
| | | > |
| | | {row.judgeName} |
| | | </div> |
| | | ), |
| | | default: () => row.judgeName |
| | | }} |
| | | </NTooltip> |
| | | ) |
| | | }, |
| | | { |
| | | key: 'category', |
| | | title: 'ç©æç±»å', |
| | | align: 'center', |
| | | width: 100, |
| | | render: row => { |
| | | if (row.category === 0) { |
| | | return 'æå'; |
| | | } |
| | | if (row.category === 1) { |
| | | return 'è¾
æ'; |
| | | } |
| | | return String(row.category); |
| | | } |
| | | }, |
| | | { |
| | | key: 'typeName', |
| | | title: 'è¾
æç±»å', |
| | | align: 'center', |
| | | width: 100, |
| | | render: row => ( |
| | | <NTooltip trigger="hover"> |
| | | {{ |
| | | trigger: () => ( |
| | | <div |
| | | style={{ |
| | | whiteSpace: 'nowrap', |
| | | overflow: 'hidden', |
| | | textOverflow: 'ellipsis' |
| | | }} |
| | | > |
| | | {row.typeName} |
| | | </div> |
| | | ), |
| | | default: () => row.typeName |
| | | }} |
| | | </NTooltip> |
| | | ) |
| | | }, |
| | | { |
| | | key: 'matName', |
| | | title: 'ç©æçå·', |
| | | align: 'center', |
| | | width: 180, |
| | | render: row => ( |
| | | <NTooltip trigger="hover"> |
| | | {{ |
| | | trigger: () => ( |
| | | <div |
| | | style={{ |
| | | whiteSpace: 'nowrap', |
| | | overflow: 'hidden', |
| | | textOverflow: 'ellipsis' |
| | | }} |
| | | > |
| | | {row.matName} |
| | | </div> |
| | | ), |
| | | default: () => row.matName |
| | | }} |
| | | </NTooltip> |
| | | ) |
| | | }, |
| | | { |
| | | key: 'matCode', |
| | | title: 'ç©æçå·ä»£ç ', |
| | | align: 'center', |
| | | width: 150 |
| | | }, |
| | | { |
| | | key: 'version', |
| | | title: 'çæ¬å·', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'status', |
| | | title: 'ç¶æ', |
| | | align: 'center', |
| | | width: 100, |
| | | render: row => { |
| | | if (row.status === 1) { |
| | | return 'å¯ç¨'; |
| | | } |
| | | if (row.status === 0) { |
| | | return '彿¡£'; |
| | | } |
| | | return String(row.status); |
| | | } |
| | | }, |
| | | { |
| | | key: 'stdName', |
| | | title: 'å¤å®è§ç¨', |
| | | align: 'center', |
| | | width: 200 |
| | | }, |
| | | { |
| | | key: 'cdate', |
| | | title: 'å建æ¶é´', |
| | | align: 'center', |
| | | width: 180 |
| | | }, |
| | | { |
| | | key: 'oper', |
| | | title: 'æä½äºº', |
| | | align: 'center', |
| | | width: 100 |
| | | }, |
| | | { |
| | | key: 'des', |
| | | title: '夿³¨', |
| | | align: 'center', |
| | | width: 200 |
| | | }, |
| | | { |
| | | key: 'operate', |
| | | title: $t('common.operate'), |
| | | align: 'center', |
| | | fixed: 'right', |
| | | width: 130, |
| | | render: row => { |
| | | const divider = () => { |
| | | if (!hasAuth('qm:judge:edit') || !hasAuth('qm:judge:remove')) { |
| | | return null; |
| | | } |
| | | return <NDivider vertical />; |
| | | }; |
| | | |
| | | const editBtn = () => { |
| | | if (!hasAuth('qm:judge: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:judge: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 fetchBatchDeleteJudge(checkedRowKeys.value); |
| | | if (error) return; |
| | | onBatchDeleted(); |
| | | } |
| | | |
| | | async function handleDelete(id: CommonType.IdType) { |
| | | // request |
| | | const { error } = await fetchBatchDeleteJudge([id]); |
| | | if (error) return; |
| | | onDeleted(); |
| | | } |
| | | |
| | | function edit(id: CommonType.IdType) { |
| | | handleEdit(id); |
| | | } |
| | | |
| | | function handleExport() { |
| | | download('/qm/judge/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"> |
| | | <JudgeSearch 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('qm:judge:add')" |
| | | :show-delete="hasAuth('qm:judge:remove')" |
| | | :show-export="hasAuth('qm:judge: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" |
| | | /> |
| | | <JudgeOperateDrawer |
| | | 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, onMounted } from 'vue'; |
| | | import { NSelect, SelectOption } from 'naive-ui'; |
| | | import { jsonClone } from '@sa/utils'; |
| | | import { fetchCreateJudge, fetchUpdateJudge } from '@/service/api/qm/judge'; |
| | | import { fetchGetStdList } from '@/service/api/qm/std'; |
| | | |
| | | import { useFormRules, useNaiveForm } from '@/hooks/common/form'; |
| | | import { $t } from '@/locales'; |
| | | |
| | | defineOptions({ |
| | | name: 'JudgeOperateDrawer' |
| | | }); |
| | | |
| | | interface Props { |
| | | /** the type of operation */ |
| | | operateType: NaiveUI.TableOperateType; |
| | | /** the edit row data */ |
| | | rowData?: Api.Qm.Judge | 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]; |
| | | }); |
| | | |
| | | const statusOptions: SelectOption[] = [ |
| | | { label: 'å¯ç¨', value: 1 }, |
| | | { label: '彿¡£', value: 0 } |
| | | ]; |
| | | |
| | | const categoryOptions: SelectOption[] = [ |
| | | { label: 'æå', value: 0 }, |
| | | { label: 'è¾
æ', value: 1 } |
| | | ]; |
| | | |
| | | |
| | | const stdOptions = ref<SelectOption[]>([]); |
| | | |
| | | type Model = Api.Qm.JudgeOperateParams; |
| | | |
| | | const model = ref<Model>(createDefaultModel()); |
| | | |
| | | function createDefaultModel(): Model { |
| | | return { |
| | | matCode: '', |
| | | matName: '', |
| | | status: null, |
| | | stdCod: '', |
| | | cdate: null, |
| | | oper: '', |
| | | des: '', |
| | | category: null, |
| | | typeCode: '', |
| | | typeName: '', |
| | | judgeName: '' |
| | | }; |
| | | } |
| | | |
| | | type RuleKey = Extract< |
| | | keyof Model, |
| | | | 'id' |
| | | >; |
| | | |
| | | const rules: Record<RuleKey, App.Global.FormRule> = { |
| | | }; |
| | | |
| | | 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 fetchStdOptions() { |
| | | const response = await fetchGetStdList({ category: model.value.category }); |
| | | const stdListData = response.data?.rows || []; |
| | | |
| | | if (stdListData.length > 0) { |
| | | stdOptions.value = stdListData.map((item: Api.Qm.Std) => ({ |
| | | label: item.stdName + item.stdCode, |
| | | value: String(item.id) |
| | | })); |
| | | } |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | await validate(); |
| | | |
| | | const { matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName } = model.value; |
| | | |
| | | // request |
| | | if (props.operateType === 'add') { |
| | | const { error } = await fetchCreateJudge({ matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName }); |
| | | if (error) return; |
| | | } |
| | | |
| | | if (props.operateType === 'edit') { |
| | | const { error } = await fetchUpdateJudge({ matCode, matName, status, stdCod, cdate, oper, des, category, typeCode, typeName, judgeName }); |
| | | if (error) return; |
| | | } |
| | | |
| | | window.$message?.success($t('common.updateSuccess')); |
| | | closeDrawer(); |
| | | emit('submitted'); |
| | | } |
| | | |
| | | watch(visible, () => { |
| | | if (visible.value) { |
| | | handleUpdateModelWhenEdit(); |
| | | restoreValidation(); |
| | | |
| | | // Fetch stdOptions when the drawer becomes visible |
| | | fetchStdOptions(); |
| | | } |
| | | }); |
| | | |
| | | watch(() => model.value.category, () => { |
| | | fetchStdOptions(); |
| | | }); |
| | | </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="judgeName"> |
| | | <NInput v-model:value="model.judgeName" placeholder="请è¾å
¥å¤å®åç§°" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç©æçå·ä»£ç " path="matCode"> |
| | | <NInput v-model:value="model.matCode" placeholder="请è¾å
¥ç©æçå·ä»£ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="ç©æçå·" path="matName"> |
| | | <NInput v-model:value="model.matName" placeholder="请è¾å
¥ç©æçå·" /> |
| | | </NFormItem> |
| | | <NFormItem label="ç©æç±»å" path="category"> |
| | | <NSelect |
| | | v-model:value="model.category" |
| | | :options="categoryOptions" |
| | | placeholder="è¯·éæ©ç©æç±»å" |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="ç¶æ" path="status"> |
| | | <NSelect |
| | | v-model:value="model.status" |
| | | :options="statusOptions" |
| | | placeholder="è¯·éæ©ç¶æ" |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å¤å®è§ç¨" path="stdCod"> |
| | | <NSelect |
| | | v-model:value="model.stdCod" |
| | | :options="stdOptions" |
| | | placeholder="è¯·éæ©å¤å®è§ç¨" |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="å建æ¶é´" path="cdate"> |
| | | <NDatePicker |
| | | v-model:formatted-value="model.cdate" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </NFormItem> |
| | | <NFormItem label="çæäºº/æä½äººå" path="oper"> |
| | | <NInput v-model:value="model.oper" placeholder="请è¾å
¥çæäºº/æä½äººå" /> |
| | | </NFormItem> |
| | | <NFormItem label="夿³¨" path="des"> |
| | | <NInput v-model:value="model.des" placeholder="请è¾å
¥å¤æ³¨" /> |
| | | </NFormItem> |
| | | |
| | | <NFormItem label="è¾
æç±»åç¼ç " path="typeCode"> |
| | | <NInput v-model:value="model.typeCode" placeholder="请è¾å
¥è¾
æç±»åç¼ç " /> |
| | | </NFormItem> |
| | | <NFormItem label="è¾
æç±»ååç§°" path="typeName"> |
| | | <NInput v-model:value="model.typeName" placeholder="请è¾å
¥è¾
æç±»ååç§°" /> |
| | | </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: 'JudgeSearch' |
| | | }); |
| | | |
| | | interface Emits { |
| | | (e: 'search'): void; |
| | | } |
| | | |
| | | const emit = defineEmits<Emits>(); |
| | | |
| | | const { formRef, validate, restoreValidation } = useNaiveForm(); |
| | | |
| | | const model = defineModel<Api.Qm.JudgeSearchParams>('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-judge-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="category" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.category" |
| | | :options="[ |
| | | { label: 'æå', value: 0 }, |
| | | { label: 'è¾
æ', value: 1 } |
| | | ]" |
| | | placeholder="è¯·éæ©ç©æç±»å" |
| | | /> |
| | | </NFormItemGi> |
| | | |
| | | <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="matName" class="pr-24px"> |
| | | <NInput v-model:value="model.matName" placeholder="请è¾å
¥ç©æçå·" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="å¤å®åç§°" label-width="auto" path="judgeName" class="pr-24px"> |
| | | <NInput v-model:value="model.judgeName" placeholder="请è¾å
¥å¤å®åç§°" /> |
| | | </NFormItemGi> |
| | | <NFormItemGi span="24 s:12 m:6" label="æ¯å¦å¯ç¨" label-width="auto" path="status" class="pr-24px"> |
| | | <NSelect |
| | | v-model:value="model.status" |
| | | :options="[ |
| | | { label: 'å
¨é¨', value: -1 }, |
| | | { label: 'å¯ç¨', value: 1 }, |
| | | { label: '彿¡£', value: 0 } |
| | | ]" |
| | | /> |
| | | </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> |