feat(biz): 优化机台和工序参数配置功能

This commit is contained in:
zxy 2026-05-08 15:48:02 +08:00
parent d8f645e00a
commit a7e9b2dab3
16 changed files with 395 additions and 187 deletions

View File

@ -1,5 +1,6 @@
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.machineparam;
import cn.hutool.core.collection.CollUtil;
import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult;
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
@ -14,6 +15,8 @@ import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.machineparam.MachineP
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.machineparamdetail.MachineParamDetailDO;
import com.ningxia.yunxi.chemmes.module.biz.service.machineparam.MachineParamService;
import com.ningxia.yunxi.chemmes.module.biz.service.machineparamdetail.MachineParamDetailService;
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
import com.ningxia.yunxi.chemmes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -42,6 +45,9 @@ public class MachineParamController {
@Resource
private MachineParamDetailService machineParamDetailService;
@Resource
private AdminUserService userService;
@PostMapping("/create")
@Operation(summary = "创建机台工艺参数配置")
@PreAuthorize("@ss.hasPermission('biz:machine-param:create')")
@ -83,7 +89,17 @@ public class MachineParamController {
@PreAuthorize("@ss.hasPermission('biz:machine-param:query')")
public CommonResult<PageResult<MachineParamRespVO>> getMachineParamPage(@Valid MachineParamPageReqVO pageReqVO) {
PageResult<MachineParamDO> pageResult = machineParamService.getMachineParamPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, MachineParamRespVO.class));
PageResult<MachineParamRespVO> voPageResult = BeanUtils.toBean(pageResult, MachineParamRespVO.class);
if (CollUtil.isNotEmpty(voPageResult.getList())) {
voPageResult.getList().forEach(item -> {
AdminUserDO userEntity = userService.getUser(Long.valueOf(item.getCreator()));
if (userEntity != null) {
item.setCreator(userEntity.getUsername());
}
});
}
return success(voPageResult);
}
@GetMapping("/export-excel")

View File

@ -76,4 +76,6 @@ public class MachineParamRespVO {
@Schema(description = "工艺参数明细列表")
private List<MachineParamDetailRespVO> details;
private String creator;
}

View File

@ -1,5 +1,6 @@
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.procparam;
import cn.hutool.core.collection.CollUtil;
import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult;
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam;
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
@ -11,6 +12,8 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.procparam.vo.ProcPa
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.procparam.vo.ProcParamSaveReqVO;
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.procparam.ProcParamDO;
import com.ningxia.yunxi.chemmes.module.biz.service.procparam.ProcParamService;
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
import com.ningxia.yunxi.chemmes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -36,6 +39,10 @@ public class ProcParamController {
@Resource
private ProcParamService procParamService;
@Resource
private AdminUserService userService;
@PostMapping("/create")
@Operation(summary = "创建工序工艺参数配置")
@PreAuthorize("@ss.hasPermission('biz:proc-param:create')")
@ -74,7 +81,16 @@ public class ProcParamController {
@PreAuthorize("@ss.hasPermission('biz:proc-param:query')")
public CommonResult<PageResult<ProcParamRespVO>> getProcParamPage(@Valid ProcParamPageReqVO pageReqVO) {
PageResult<ProcParamDO> pageResult = procParamService.getProcParamPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProcParamRespVO.class));
PageResult<ProcParamRespVO> voPageResult = BeanUtils.toBean(pageResult, ProcParamRespVO.class);
if (CollUtil.isNotEmpty(voPageResult.getList())) {
voPageResult.getList().forEach(item -> {
AdminUserDO userEntity = userService.getUser(Long.valueOf(item.getCreator()));
if (userEntity != null) {
item.setCreator(userEntity.getUsername());
}
});
}
return success(voPageResult);
}
@GetMapping("/export-excel")

View File

@ -1,14 +1,13 @@
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.procparam.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ningxia.yunxi.chemmes.framework.excel.core.annotations.DictFormat;
import com.ningxia.yunxi.chemmes.framework.excel.core.convert.DictConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 工序工艺参数配置 Response VO")
@Data
@ -54,7 +53,9 @@ public class ProcParamRespVO {
@Schema(description = "参数类别(1 温度 2压力 3 时间 4速度)", example = "1")
@ExcelProperty(value = "参数类别(1 温度 2压力 3 时间 4速度)", converter = DictConvert.class)
@DictFormat("param_type") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
@DictFormat("param_type")
private String procParamType;
private String creator;
}

View File

@ -1,5 +1,6 @@
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.procparam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
@ -36,4 +37,11 @@ public interface ProcParamMapper extends BaseMapperX<ProcParamDO> {
.like(ProcParamDO::getProcCd, keyWord))
);
}
default ProcParamDO selectByProcIdAndParamTypeAndParamName(Integer procId, String procParamType, String procParamName) {
return selectOne(new LambdaQueryWrapper<ProcParamDO>()
.eq(ProcParamDO::getProcId, procId)
.eq(ProcParamDO::getProcParamType, procParamType)
.eq(ProcParamDO::getProcParamName, procParamName));
}
}

View File

@ -51,11 +51,13 @@ public class MachineParamServiceImpl implements MachineParamService {
}
@Override
@Transactional
public void deleteMachineParam(Integer id) {
// 校验存在
validateMachineParamExists(id);
// 删除
machineParamMapper.deleteById(id);
machineParamDetailService.deleteByMachineParamId(id);
}
private void validateMachineParamExists(Integer id) {

View File

@ -56,4 +56,6 @@ public interface MachineParamDetailService {
void saveMachineParamDetails(Integer id, List<MachineParamDetailSaveReqVO> details);
List<MachineParamDetailDO> getListByMachineParamId(Integer id);
void deleteByMachineParamId(Integer machineParamId);
}

View File

@ -81,5 +81,10 @@ public class MachineParamDetailServiceImpl implements MachineParamDetailService
public List<MachineParamDetailDO> getListByMachineParamId(Integer machineParamId) {
return machineParamDetailMapper.selectListByMachineParamId(machineParamId);
}
@Override
public void deleteByMachineParamId(Integer machineParamId) {
machineParamDetailMapper.deleteByMachineParamId(machineParamId);
}
}

View File

@ -12,6 +12,8 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 工序工艺参数配置 Service 实现类
*
@ -27,6 +29,7 @@ public class ProcParamServiceImpl implements ProcParamService {
@Override
public Integer createProcParam(ProcParamSaveReqVO createReqVO) {
// 插入
validateProcParamUnique(createReqVO);
ProcParamDO procParam = BeanUtils.toBean(createReqVO, ProcParamDO.class);
procParamMapper.insert(procParam);
// 返回
@ -37,6 +40,7 @@ public class ProcParamServiceImpl implements ProcParamService {
public void updateProcParam(ProcParamSaveReqVO updateReqVO) {
// 校验存在
validateProcParamExists(updateReqVO.getId());
validateProcParamUnique(updateReqVO);
// 更新
ProcParamDO updateObj = BeanUtils.toBean(updateReqVO, ProcParamDO.class);
procParamMapper.updateById(updateObj);
@ -52,7 +56,18 @@ public class ProcParamServiceImpl implements ProcParamService {
private void validateProcParamExists(Integer id) {
if (procParamMapper.selectById(id) == null) {
// throw exception(PROC_PARAM_NOT_EXISTS);
throw exception("参数不存在");
}
}
private void validateProcParamUnique(ProcParamSaveReqVO saveReqVO) {
ProcParamDO existParam = procParamMapper.selectByProcIdAndParamTypeAndParamName(
saveReqVO.getProcId(),
saveReqVO.getProcParamType(),
saveReqVO.getProcParamName());
if (existParam != null && !existParam.getId().equals(saveReqVO.getId())) {
throw exception("同一工序下同一参数类别的参数名称不能重复");
}
}

View File

@ -14,8 +14,8 @@
<el-table-column label="序号" width="60px" align="center" type="index" />
<el-table-column label="机台编码" align="center" prop="machineCd" />
<el-table-column label="机台名称" align="center" prop="machineName" />
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter2" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
</el-table>
<template #footer>
<el-button @click="confirmSelection" type="primary"> </el-button>
@ -25,7 +25,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, nextTick } from 'vue'
import { dateFormatter2 } from '@/utils/formatTime'
import { dateFormatter } from '@/utils/formatTime'
import * as MachineApi from '@/api/biz/machine'
const message = useMessage()

View File

@ -109,32 +109,44 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="standardValue" label="标准值(*)" >
<el-table-column prop="standardValue" label="标准值(*)" align="center">
<template #default="scope">
<el-input v-model.number="scope.row.standardValue" placeholder="标准值" size="small" />
<el-input
v-model="scope.row.standardValue"
size="small"
@input="(val) => handleNumberInput(val, scope.row, 'standardValue')"
/>
</template>
</el-table-column>
<el-table-column prop="lowerLimit" label="下限(*)" >
<el-table-column prop="lowerLimit" label="下限(*)" align="center">
<template #default="scope">
<el-input v-model.number="scope.row.lowerLimit" placeholder="下限" size="small" />
<el-input
v-model="scope.row.lowerLimit"
size="small"
@input="(val) => handleNumberInput(val, scope.row, 'lowerLimit')"
/>
</template>
</el-table-column>
<el-table-column prop="upperLimit" label="上限(*)">
<el-table-column prop="upperLimit" label="上限(*)" align="center">
<template #default="scope">
<el-input v-model.number="scope.row.upperLimit" placeholder="上限" size="small" />
<el-input
v-model="scope.row.upperLimit"
size="small"
@input="(val) => handleNumberInput(val, scope.row, 'upperLimit')"
/>
</template>
</el-table-column>
<el-table-column prop="dev" label="偏差">
<el-table-column prop="dev" label="偏差" width="90" align="center">
<template #default="scope">
<el-input v-model="scope.row.dev" placeholder="偏差" size="small" />
<el-input v-model="scope.row.dev" size="small" />
</template>
</el-table-column>
<el-table-column prop="procParamUnit" label="单位(*)">
<el-table-column prop="procParamUnit" label="单位(*)" width="80" align="center">
<template #default="scope">
<el-input v-model="scope.row.procParamUnit" placeholder="单位" size="small" />
<el-input v-model="scope.row.procParamUnit" size="small" />
</template>
</el-table-column>
<el-table-column prop="isAlert" label="预警(*)">
<el-table-column prop="isAlert" label="预警(*)" width="80" align="center">
<template #default="scope">
<el-select v-model="scope.row.isAlert" placeholder="选择" size="small">
<el-option label="是" value="0" />
@ -142,14 +154,16 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注">
<el-table-column prop="remark" label="备注" align="center">
<template #default="scope">
<el-input v-model="scope.row.remark" placeholder="备注" size="small" />
<el-input v-model="scope.row.remark" size="small" />
</template>
</el-table-column>
<el-table-column label="操作" width="60">
<el-table-column label="操作" width="60" align="center">
<template #default="scope">
<el-button type="text" size="small" @click="removeParamRow(scope.$index)">删除</el-button>
<div style="display: flex; justify-content: center; align-items: center; width: 100%; height: 100%;">
<el-button type="text" size="small" @click="removeParamRow(scope.$index)">删除</el-button>
</div>
</template>
</el-table-column>
</el-table>
@ -182,9 +196,9 @@ interface ParamDetail {
procParamName: string
procParamUnit: string
procParamId?: number
standardValue: number
upperLimit: number
lowerLimit: number
standardValue: string | number
upperLimit: string | number
lowerLimit: string | number
dev: string
isAlert: string
remark: string
@ -336,15 +350,40 @@ const addParamRow = () => {
paramDetailList.value.push({
procParamName: '',
procParamUnit: '',
standardValue: 0,
upperLimit: 0,
lowerLimit: 0,
standardValue: undefined,
upperLimit: undefined,
lowerLimit: undefined,
dev: '',
isAlert: '1',
remark: ''
})
}
/** 数值输入限制,支持负数,小数点后最多两位 */
const handleNumberInput = (val: string, row: ParamDetail, field: 'standardValue' | 'lowerLimit' | 'upperLimit') => {
//
let filtered = val.replace(/[^\d.\-]/g, '')
//
if (filtered.includes('-')) {
filtered = '-' + filtered.replace(/-/g, '')
}
//
filtered = filtered.replace(/\.{2,}/g, '.').replace(/^(\d*\.)\./g, '$1')
// 0
let result = filtered.startsWith('.') ? '0' + filtered : filtered
//
if (result.startsWith('-') && result.charAt(1) === '.') {
result = '-0' + result.substring(1)
}
// 2
const parts = result.split('.')
if (parts.length > 1 && parts[1].length > 2) {
row[field] = parts[0] + '.' + parts[1].substring(0, 2)
} else {
row[field] = result
}
}
/** 删除工艺参数行 */
const removeParamRow = (index: number) => {
paramDetailList.value.splice(index, 1)
@ -357,6 +396,12 @@ const handleProcChange = (val: number) => {
formData.procCd = proc.procCd
formData.procName = proc.procName
}
//
formData.machineId = undefined
formData.machineCd = ''
formData.machineName = ''
//
paramDetailList.value = []
//
loadMachineOptions(val)
loadProcParamOptions(val)
@ -389,7 +434,7 @@ const handleProcParamChange = (val: number, row: ParamDetail) => {
)
if (isDuplicate) {
message.warning('该工艺参数已被选择,请选择其他参数')
message.warning('工艺参数名称不能重复')
row.procParamId = undefined
row.procParamName = ''
row.procParamUnit = ''
@ -416,29 +461,32 @@ const submitForm = async () => {
return
}
for (const param of paramDetailList.value) {
for (let i = 0; i < paramDetailList.value.length; i++) {
const param = paramDetailList.value[i]
const rowNum = i + 1
if (!param.procParamId) {
message.warning('请选择工艺参数')
message.warning(`${rowNum} 行工艺参数名称不能为空`)
return
}
if (param.standardValue === undefined || param.standardValue === null) {
message.warning('请填写标准值')
if (!param.standardValue && param.standardValue !== 0) {
message.warning(`${rowNum} 行标准值不能为空`)
return
}
if (param.lowerLimit === undefined || param.lowerLimit === null) {
message.warning('请填写下限值')
if (!param.lowerLimit && param.lowerLimit !== 0) {
message.warning(`${rowNum} 行下限值不能为空`)
return
}
if (param.upperLimit === undefined || param.upperLimit === null) {
message.warning('请填写上限值')
if (!param.upperLimit && param.upperLimit !== 0) {
message.warning(`${rowNum} 行上限值不能为空`)
return
}
if (!param.procParamUnit) {
message.warning('请填写单位')
message.warning(`${rowNum} 行单位不能为空`)
return
}
if (!param.isAlert) {
message.warning('请选择是否预警')
message.warning(`${rowNum} 行是否预警不能为空`)
return
}
}
@ -447,7 +495,7 @@ const submitForm = async () => {
const paramIds = paramDetailList.value.map(item => item.procParamId).filter(id => id)
const uniqueIds = [...new Set(paramIds)]
if (paramIds.length !== uniqueIds.length) {
message.warning('存在重复选择的工艺参数,请确保每个参数只选择一次')
message.warning('工艺参数名称不能重复')
return
}
@ -509,13 +557,14 @@ onMounted(() => {
.section-header {
display: flex;
justify-content: space-between;
justify-content: flex-start;
align-items: center;
margin-bottom: 12px;
.section-title {
font-weight: 600;
font-size: 14px;
margin-right: 12px;
}
}

View File

@ -8,7 +8,25 @@
:inline="true"
label-width="80px"
>
<el-form-item label="状态" prop="enabledStatus">
<el-form-item label="机台名称" prop="machineName">
<el-input
v-model="queryParams.machineName"
placeholder="请输入机台名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="产品名称" prop="matName">
<el-input
v-model="queryParams.matName"
placeholder="请输入产品名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态" prop="enabledStatus">
<el-select
v-model="queryParams.enabledStatus"
placeholder="请选择状态"
@ -23,24 +41,6 @@
/>
</el-select>
</el-form-item>
<el-form-item label="物料名称" prop="matName">
<el-input
v-model="queryParams.matName"
placeholder="请输入物料名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="机台名称" prop="machineName">
<el-input
v-model="queryParams.machineName"
placeholder="请输入机台名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -88,14 +88,14 @@
>
编辑
</el-button>
<el-button
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['biz:machine-param:delete']"
>
删除
</el-button>
</el-button> -->
</template>
</el-table-column>
</el-table>
@ -109,7 +109,7 @@
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<MachineParamForm ref="formRef" @success="getList" />
<MachineParamForm ref="formRef" @success="getList" @close="handleQuery"/>
</template>
<script setup lang="ts">

View File

@ -1,5 +1,5 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<el-form
ref="formRef"
:model="formData"
@ -7,77 +7,137 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="工序编码" prop="procCd">
<el-input v-model="formData.procCd" placeholder="请输入工序编码" />
</el-form-item>
<el-form-item label="工序名称" prop="procName">
<el-input v-model="formData.procName" placeholder="请输入工序名称" />
</el-form-item>
<el-form-item label="状态" prop="enabledStatus">
<el-radio-group v-model="formData.enabledStatus">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工序" prop="procId" :disabled="formType === 'update'">
<el-select
v-model="formData.procId"
placeholder="请选择工序"
filterable
@change="handleProcChange"
>
<el-option
v-for="item in procOptions"
:key="item.id"
:label="item.procName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参数类别" prop="procParamType" >
<el-select v-model="formData.procParamType" placeholder="请选择参数类别">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PARAM_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参数名称" prop="procParamName" >
<el-input v-model="formData.procParamName" placeholder="请输入参数名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参数单位" prop="procParamUnit" >
<el-input v-model="formData.procParamUnit" placeholder="请输入参数单位" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="启用状态" prop="enabledStatus" >
<el-select v-model="formData.enabledStatus" placeholder="请选择状态">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="工序id" prop="procId">
<el-input v-model="formData.procId" placeholder="请输入工序id" />
</el-form-item>
<el-form-item label="参数名称" prop="procParamName">
<el-input v-model="formData.procParamName" placeholder="请输入参数名称" />
</el-form-item>
<el-form-item label="参数单位" prop="procParamUnit">
<el-input v-model="formData.procParamUnit" placeholder="请输入参数单位" />
</el-form-item>
<el-form-item label="参数类别" prop="procParamType">
<el-select v-model="formData.procParamType" placeholder="请选择参数类别">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PARAM_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
<el-input
v-model="formData.remark"
placeholder="请输入备注"
type="textarea"
:rows="3"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">保存</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import * as ProcParamApi from '@/api/biz/procparam'
import * as ProcApi from '@/api/biz/proc'
const { t } = useI18n() //
const message = useMessage() //
import type { ProcVO } from '@/api/biz/proc'
import { watch } from 'vue'
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
procCd: undefined,
procName: undefined,
enabledStatus: undefined,
remark: undefined,
procId: undefined,
procParamName: undefined,
procParamUnit: undefined,
procParamType: undefined,
const { t } = useI18n()
const message = useMessage()
const dialogVisible = ref(false)
const dialogTitle = ref('')
const formLoading = ref(false)
const formType = ref('')
//
const procOptions = ref<ProcVO[]>([])
const formData = reactive({
id: undefined as number | undefined,
procId: undefined as number | undefined,
procCd: '',
procName: '',
procParamName: '',
procParamUnit: '',
procParamType: '',
enabledStatus: 0,
remark: ''
})
const formRules = reactive({
procId: [
{ required: true, message: '请选择工序', trigger: 'change' }
],
procParamType: [
{ required: true, message: '请选择参数类别', trigger: 'change' }
],
procParamName: [
{ required: true, message: '请输入参数名称', trigger: 'blur' }
],
enabledStatus: [
{ required: true, message: '请选择启用状态', trigger: 'change' }
]
})
const formRef = ref() // Ref
const formRef = ref()
/** 初始化下拉选项 */
const initOptions = async () => {
const procs = await ProcApi.getProcDropdown({})
procOptions.value = procs || []
}
/** 工序选择变化 */
const handleProcChange = (val: number) => {
const proc = procOptions.value.find(p => p.id === val)
if (proc) {
formData.procCd = proc.procCd
formData.procName = proc.procName
}
}
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
@ -85,27 +145,48 @@ const open = async (type: string, id?: number) => {
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await ProcParamApi.getProcParam(id)
const data = await ProcParamApi.getProcParam(id)
formData.id = data.id
formData.procId = data.procId
formData.procCd = data.procCd || ''
formData.procName = data.procName || ''
formData.procParamName = data.procParamName || ''
formData.procParamUnit = data.procParamUnit || ''
formData.procParamType = data.procParamType || ''
formData.enabledStatus = data.enabledStatus || 0
formData.remark = data.remark || ''
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
defineExpose({ open })
/** 提交表单 */
const emit = defineEmits(['success']) // success
const emit = defineEmits(['success', 'close'])
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ProcParamApi.ProcParamVO
const data = {
id: formData.id,
procId: formData.procId,
procCd: formData.procCd,
procName: formData.procName,
procParamName: formData.procParamName,
procParamUnit: formData.procParamUnit,
procParamType: formData.procParamType,
enabledStatus: formData.enabledStatus,
remark: formData.remark
}
if (formType.value === 'create') {
await ProcParamApi.createProcParam(data)
message.success(t('common.createSuccess'))
@ -113,8 +194,8 @@ const submitForm = async () => {
await ProcParamApi.updateProcParam(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
@ -123,17 +204,27 @@ const submitForm = async () => {
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
procCd: undefined,
procName: undefined,
enabledStatus: undefined,
remark: undefined,
procId: undefined,
procParamName: undefined,
procParamUnit: undefined,
procParamType: undefined,
}
formData.id = undefined
formData.procId = undefined
formData.procCd = ''
formData.procName = ''
formData.procParamName = ''
formData.procParamUnit = ''
formData.procParamType = ''
formData.enabledStatus = 0
formData.remark = ''
formRef.value?.resetFields()
}
/** 弹窗关闭时通知父组件 */
watch(dialogVisible, (val) => {
if (!val) {
emit('close')
}
})
/** 组件挂载时初始化 */
import { onMounted } from 'vue'
onMounted(() => {
initOptions()
})
</script>

View File

@ -17,21 +17,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态" prop="enabledStatus">
<el-select
v-model="queryParams.enabledStatus"
placeholder="请选择状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="参数类别" prop="procParamType">
<el-select
v-model="queryParams.procParamType"
@ -46,6 +32,21 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="enabledStatus">
<el-select
v-model="queryParams.enabledStatus"
placeholder="请选择状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
@ -65,23 +66,9 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="自增字段" align="center" prop="id" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="序号" align="center" type="index" width="60px" />
<el-table-column label="工序编码" align="center" prop="procCd" />
<el-table-column label="工序名称" align="center" prop="procName" />
<el-table-column label="状态" align="center" prop="enabledStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="工序id" align="center" prop="procId" />
<el-table-column label="参数名称" align="center" prop="procParamName" />
<el-table-column label="参数单位" align="center" prop="procParamUnit" />
<el-table-column label="参数类别" align="center" prop="procParamType">
@ -89,6 +76,20 @@
<dict-tag :type="DICT_TYPE.PARAM_TYPE" :value="scope.row.procParamType" />
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="enabledStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_STATUS" :value="scope.row.enabledStatus" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
@ -99,14 +100,14 @@
>
编辑
</el-button>
<el-button
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['biz:proc-param:delete']"
>
删除
</el-button>
</el-button> -->
</template>
</el-table-column>
</el-table>
@ -120,7 +121,7 @@
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ProcParamForm ref="formRef" @success="getList" />
<ProcParamForm ref="formRef" @success="getList" @close="handleQuery"/>
</template>
<script setup lang="ts">

View File

@ -1,5 +1,5 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1000px">
<el-form
ref="formRef"
:model="formData"
@ -62,7 +62,7 @@
<el-table-column label="机台编码" align="center" prop="machineCd" />
<el-table-column label="机台名称" align="center" prop="machineName" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter2" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" />
<el-table-column label="操作" align="center" width="80px">
<template #default="scope">
<el-button link type="danger" size="small" @click="removeMachine(scope.$index)">删除</el-button>
@ -87,7 +87,7 @@ import { Icon } from '@/components/Icon'
import * as UserMachineApi from '@/api/biz/usermachine'
import * as SystemUserApi from '@/api/system/user'
import MachineSelect from '@/views/biz/machine/MachineSelect.vue'
import { dateFormatter2 } from '@/utils/formatTime'
import { dateFormatter } from '@/utils/formatTime'
const { t } = useI18n()
const message = useMessage()

View File

@ -81,7 +81,7 @@
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter2" width="180px"
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
@ -121,7 +121,7 @@
<el-table-column label="机台编码" align="center" prop="machineCd" />
<el-table-column label="机台名称" align="center" prop="machineName" />
<el-table-column label="创建人" align="center" prop="creator" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter2" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" />
</el-table>
</ContentWrap>
@ -131,7 +131,7 @@
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter2 } from '@/utils/formatTime'
import { dateFormatter } from '@/utils/formatTime'
import * as UserMachineApi from '@/api/biz/usermachine'
import UserMachineForm from './UserMachineForm.vue'