【组织架构-班组】初步完成

master
zengchenxi 10 months ago
parent 38edbe8a6d
commit b30a906ef1

@ -22,5 +22,6 @@ public interface ErrorCodeConstants {
/*********组织架构************/
ErrorCode WORKSHOP_NOT_EXISTS = new ErrorCode(1_002_001, "车间不存在");
ErrorCode CLASSES_NOT_EXISTS = new ErrorCode(1_002_002, "生产班组不存在");
}

@ -0,0 +1,95 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.classes;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.classes.ClassesDO;
import com.chanko.yunxi.mes.module.heli.service.classes.ClassesService;
@Tag(name = "管理后台 - 生产班组")
@RestController
@RequestMapping("/heli/classes")
@Validated
public class ClassesController {
@Resource
private ClassesService classesService;
@PostMapping("/create")
@Operation(summary = "创建生产班组")
@PreAuthorize("@ss.hasPermission('heli:classes:create')")
public CommonResult<Long> createClasses(@Valid @RequestBody ClassesSaveReqVO createReqVO) {
return success(classesService.createClasses(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新生产班组")
@PreAuthorize("@ss.hasPermission('heli:classes:update')")
public CommonResult<Boolean> updateClasses(@Valid @RequestBody ClassesSaveReqVO updateReqVO) {
classesService.updateClasses(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除生产班组")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('heli:classes:delete')")
public CommonResult<Boolean> deleteClasses(@RequestParam("id") Long id) {
classesService.deleteClasses(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得生产班组")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:classes:query')")
public CommonResult<ClassesRespVO> getClasses(@RequestParam("id") Long id) {
ClassesDO classes = classesService.getClasses(id);
return success(BeanUtils.toBean(classes, ClassesRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得生产班组分页")
@PreAuthorize("@ss.hasPermission('heli:classes:query')")
public CommonResult<PageResult<ClassesRespVO>> getClassesPage(@Valid ClassesPageReqVO pageReqVO) {
PageResult<ClassesDO> pageResult = classesService.getClassesPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ClassesRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产班组 Excel")
@PreAuthorize("@ss.hasPermission('heli:classes:export')")
@OperateLog(type = EXPORT)
public void exportClassesExcel(@Valid ClassesPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ClassesDO> list = classesService.getClassesPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "生产班组.xls", "数据", ClassesRespVO.class,
BeanUtils.toBean(list, ClassesRespVO.class));
}
}

@ -0,0 +1,43 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 生产班组分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ClassesPageReqVO extends PageParam {
@Schema(description = "班组编码,唯一")
private String code;
@Schema(description = "班组名称,唯一", example = "芋艿")
private String name;
@Schema(description = "所属车间", example = "13955")
private Long workshopId;
@Schema(description = "部门id", example = "12251")
private Long deptId;
@Schema(description = "负责人", example = "1539")
private Long leaderUserId;
@Schema(description = "班组描述", example = "你猜")
private String description;
@Schema(description = "状态,1表示正常2表示禁用", example = "1")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,60 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.classes.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.*;
@Schema(description = "管理后台 - 生产班组 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ClassesRespVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "4116")
@ExcelProperty("自增字段,唯一")
private Long id;
@Schema(description = "班组编码,唯一")
@ExcelProperty("班组编码,唯一")
private String code;
@Schema(description = "班组名称,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("班组名称,唯一")
private String name;
@Schema(description = "所属车间", requiredMode = Schema.RequiredMode.REQUIRED, example = "13955")
@ExcelProperty("所属车间")
private Long workshopId;
@Schema(description = "所属车间名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "13955")
@ExcelProperty("所属车间名称")
private String workshopName;
@Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12251")
@ExcelProperty("部门id")
private Long deptId;
@Schema(description = "负责人", example = "1539")
@ExcelProperty("负责人")
private Long leaderUserId;
@Schema(description = "负责人名称", example = "1539")
@ExcelProperty("负责人名称")
private String leaderUserName;
@Schema(description = "班组描述", example = "你猜")
@ExcelProperty("班组描述")
private String description;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("状态,1表示正常2表示禁用")
private Integer status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,41 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
@Schema(description = "管理后台 - 生产班组新增/修改 Request VO")
@Data
public class ClassesSaveReqVO {
@Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "4116")
private Long id;
@Schema(description = "班组编码,唯一")
private String code;
@Schema(description = "班组名称,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@NotEmpty(message = "班组名称,唯一不能为空")
private String name;
@Schema(description = "所属车间", requiredMode = Schema.RequiredMode.REQUIRED, example = "13955")
@NotNull(message = "所属车间不能为空")
private Long workshopId;
@Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12251")
@NotNull(message = "部门id不能为空")
private Long deptId;
@Schema(description = "负责人", example = "1539")
private Long leaderUserId;
@Schema(description = "班组描述", example = "你猜")
private String description;
@Schema(description = "状态,1表示正常2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "状态,1表示正常2表示禁用不能为空")
private Integer status;
}

@ -0,0 +1,70 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.classes;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("base_classes")
@KeySequence("base_classes_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ClassesDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String code;
/**
*
*/
private String name;
/**
*
*/
private Long workshopId;
/**
* id
*/
private Long deptId;
/**
*
*/
private Long leaderUserId;
/**
*
*/
private String description;
/**
* ,12
*/
private Integer status;
/**
*
*/
@TableField(exist = false)
private String workshopName;
/**
*
*/
@TableField(exist = false)
private String leaderUserName;
}

@ -0,0 +1,34 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.classes;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo.ClassesPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.classes.ClassesDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.workshop.WorkshopDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ClassesMapper extends BaseMapperX<ClassesDO> {
default PageResult<ClassesDO> selectPage(ClassesPageReqVO reqVO) {
MPJLambdaWrapper<ClassesDO> query = new MPJLambdaWrapper<>();
query.selectAll(ClassesDO.class)
.select("u.nickname as leaderUserName", "w.name as workshopName")
.leftJoin(AdminUserDO.class, "u", AdminUserDO::getId, ClassesDO::getLeaderUserId)
.leftJoin(WorkshopDO.class, "w", WorkshopDO::getId, ClassesDO::getWorkshopId);
query.like(!StringUtils.isEmpty(reqVO.getCode()), ClassesDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getName()), ClassesDO::getName, reqVO.getName())
.eq(reqVO.getStatus() != null, ClassesDO::getStatus, reqVO.getStatus());
return selectPage(reqVO, query);
}
}

@ -0,0 +1,55 @@
package com.chanko.yunxi.mes.module.heli.service.classes;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.classes.ClassesDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface ClassesService {
/**
*
*
* @param createReqVO
* @return
*/
Long createClasses(@Valid ClassesSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateClasses(@Valid ClassesSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteClasses(Long id);
/**
*
*
* @param id
* @return
*/
ClassesDO getClasses(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ClassesDO> getClassesPage(ClassesPageReqVO pageReqVO);
}

@ -0,0 +1,79 @@
package com.chanko.yunxi.mes.module.heli.service.classes;
import cn.hutool.core.lang.UUID;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.classes.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.classes.ClassesDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.classes.ClassesMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ClassesServiceImpl implements ClassesService {
@Resource
private ClassesMapper classesMapper;
@Override
public Long createClasses(ClassesSaveReqVO createReqVO) {
// 插入
ClassesDO classes = BeanUtils.toBean(createReqVO, ClassesDO.class);
classes.setCode(UUID.fastUUID().toString(true));
classesMapper.insert(classes);
classes.setCode(CodeEnum.CLASSES.getCode(classes.getId().toString()));
classesMapper.updateById(classes);
// 返回
return classes.getId();
}
@Override
public void updateClasses(ClassesSaveReqVO updateReqVO) {
// 校验存在
validateClassesExists(updateReqVO.getId());
// 更新
ClassesDO updateObj = BeanUtils.toBean(updateReqVO, ClassesDO.class);
classesMapper.updateById(updateObj);
}
@Override
public void deleteClasses(Long id) {
// 校验存在
validateClassesExists(id);
// 删除
classesMapper.deleteById(id);
}
private void validateClassesExists(Long id) {
if (classesMapper.selectById(id) == null) {
throw exception(CLASSES_NOT_EXISTS);
}
}
@Override
public ClassesDO getClasses(Long id) {
return classesMapper.selectById(id);
}
@Override
public PageResult<ClassesDO> getClassesPage(ClassesPageReqVO pageReqVO) {
return classesMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,12 @@
<?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="com.chanko.yunxi.mes.module.heli.dal.mysql.classes.ClassesMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface ClassesVO {
id: number
code: string
name: string
workshopId: number
deptId: number
leaderUserId: number
description: string
status: number
}
// 查询生产班组分页
export const getClassesPage = async (params) => {
return await request.get({ url: `/heli/classes/page`, params })
}
// 查询生产班组详情
export const getClasses = async (id: number) => {
return await request.get({ url: `/heli/classes/get?id=` + id })
}
// 新增生产班组
export const createClasses = async (data: ClassesVO) => {
return await request.post({ url: `/heli/classes/create`, data })
}
// 修改生产班组
export const updateClasses = async (data: ClassesVO) => {
return await request.put({ url: `/heli/classes/update`, data })
}
// 删除生产班组
export const deleteClasses = async (id: number) => {
return await request.delete({ url: `/heli/classes/delete?id=` + id })
}
// 导出生产班组 Excel
export const exportClasses = async (params) => {
return await request.download({ url: `/heli/classes/export-excel`, params })
}

@ -0,0 +1,214 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="班组编码" prop="code">
<el-input v-model="formData.code" disabled placeholder="系统自动生成" />
</el-form-item>
<el-form-item label="班组名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入班组名称" />
</el-form-item>
<el-form-item label="所属车间" prop="workshopId">
<el-select v-model="formData.workshopId"
placeholder="请输入负责人"
:remote-method="remoteWorkshopSearch"
remote-show-suffix
remote
reserve-keyword
filterable
@change="workshopChange"
:loading="workshopSelectLoading"
>
<el-option
v-for="item in workshopSelectList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="负责人" prop="leaderUserId">
<el-select v-model="formData.leaderUserId"
placeholder="请输入负责人"
:remote-method="remoteUserSearch"
remote-show-suffix
remote
reserve-keyword
filterable
:loading="userSelectLoading"
>
<el-option
v-for="item in userSelectList"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="班组描述" prop="description">
<el-input type="textarea" v-model="formData.description" height="150px" />
</el-form-item>
<el-form-item label="启用状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<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 * as ClassesApi from '@/api/heli/classes'
import * as UserApi from "@/api/system/user";
import * as WorkshopApi from "@/api/heli/workshop";
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
import {getWorkshopPage} from "@/api/heli/workshop";
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
name: undefined,
workshopId: undefined,
deptId: undefined,
leaderUserId: undefined,
description: undefined,
status: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '班组名称不能为空', trigger: 'blur' }],
workshopId: [{ required: true, message: '所属车间不能为空', trigger: 'blur' }],
status: [{ required: true, message: '启用状态不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
const userList = ref<UserApi.UserVO[]>([]) //
const userSelectList = ref<UserApi.UserVO[]>([])
const userSelectLoading = ref(false);
const remoteUserSearch = (query: string) => {
if (query) {
userSelectLoading.value = true
setTimeout(() => {
userSelectLoading.value = false
userSelectList.value = userList.value.filter((item) => {
return item.nickname.toLowerCase().includes(query.toLowerCase())
})
}, 200)
} else {
userSelectList.value = []
}
}
const workshopList = ref<WorkshopApi.WorkshopVO[]>([]) //
const workshopSelectList = ref<WorkshopApi.WorkshopVO[]>([])
const workshopSelectLoading = ref(false);
const remoteWorkshopSearch = (query: string) => {
if (query) {
workshopSelectLoading.value = true
setTimeout(() => {
workshopSelectLoading.value = false
workshopSelectList.value = workshopList.value.filter((item) => {
return item.name.toLowerCase().includes(query.toLowerCase())
})
}, 200)
} else {
workshopSelectList.value = []
}
}
const workshopChange = (id: number) => {
formData.value.deptId = workshopSelectList.value.find((ws) => ws.id === id)?.deptId;
}
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
formLoading.value = true
try {
if (id) {
formData.value = await ClassesApi.getClasses(id)
}
//
const data = await UserApi.getSimpleUserList()
userList.value = data;
userSelectList.value = data;
//
let params = {
pageNo: 1,
pageSize: 99
}
const dataWorkshop = await WorkshopApi.getWorkshopPage(params)
workshopList.value = dataWorkshop.list;
workshopSelectList.value = dataWorkshop.list;
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ClassesApi.ClassesVO
if (formType.value === 'create') {
await ClassesApi.createClasses(data)
message.success(t('common.createSuccess'))
} else {
await ClassesApi.updateClasses(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
workshopId: undefined,
deptId: undefined,
leaderUserId: undefined,
description: undefined,
status: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,214 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="班组编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入班组编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="班组名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入班组名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="启用状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择启用状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_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>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['heli:classes:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<!-- <el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:classes:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>-->
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="班组编码" align="center" prop="code" />
<el-table-column label="班组名称" align="center" prop="name" />
<el-table-column label="所属车间" align="center" prop="workshopName" />
<el-table-column label="负责人" align="center" prop="leaderUserName" />
<el-table-column label="启用状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['heli:classes:update']"
>
编辑
</el-button>
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['heli:classes:delete']"
>
删除
</el-button>-->
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ClassesForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as ClassesApi from '@/api/heli/classes'
import ClassesForm from './ClassesForm.vue'
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
defineOptions({ name: 'Classes' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
workshopId: undefined,
deptId: undefined,
leaderUserId: undefined,
description: undefined,
status: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ClassesApi.getClassesPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ClassesApi.deleteClasses(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ClassesApi.exportClasses(queryParams)
download.excel(data, '生产班组.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -28,6 +28,7 @@
<el-select v-model="formData.leaderUserId"
placeholder="请输入负责人"
:remote-method="remoteUserSearch"
remote-show-suffix
remote
reserve-keyword
filterable

@ -27,6 +27,7 @@
<el-select v-model="formData.leaderUserId"
placeholder="请输入负责人"
:remote-method="remoteUserSearch"
remote-show-suffix
remote
reserve-keyword
filterable

@ -36,7 +36,7 @@ UNIQUE KEY `idx_name` (`name`) USING BTREE
DROP TABLE IF EXISTS `base_classes`;
CREATE TABLE `base_classes` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增字段,唯一',
`code` varchar(64) DEFAULT NULL COMMENT '班组编码,唯一',
`code` varchar(64) NOT NULL COMMENT '班组编码,唯一',
`name` varchar(64) NOT NULL COMMENT '班组名称,唯一',
`workshop_id` BIGINT(20) NOT NULL COMMENT '所属车间',
`dept_id` BIGINT(20) NOT NULL COMMENT '部门id',

Loading…
Cancel
Save