✨ feat(mes): 添加工序编号及名称,优化工作站相关功能
新增工序编号和名称字段,更新工作站相关逻辑以支持工序信息的处理。优化工作站的创建、更新和查询功能,确保工序信息的有效性和完整性。pull/871/MERGE
parent
78e8ec1772
commit
1ad04812e1
|
|
@ -6,13 +6,14 @@
|
|||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
:disabled="isDetail"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="工作站编码" prop="code">
|
||||
<el-input v-model="formData.code" placeholder="请输入工作站编码">
|
||||
<template #append>
|
||||
<el-button @click="generateCode" :disabled="formType === 'update'">
|
||||
<el-button @click="generateCode" :disabled="formType !== 'create'">
|
||||
生成
|
||||
</el-button>
|
||||
</template>
|
||||
|
|
@ -98,6 +99,16 @@
|
|||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="所属工序" prop="processId">
|
||||
<ProProcessSelect
|
||||
v-model="formData.processId"
|
||||
placeholder="请选择所属工序"
|
||||
clearable
|
||||
class="!w-1/1"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
|
|
@ -108,19 +119,21 @@
|
|||
</el-row>
|
||||
</el-form>
|
||||
<!-- 编辑时显示子资源 Tab -->
|
||||
<el-tabs v-if="formType === 'update'" v-model="activeTab" class="mt-10px">
|
||||
<el-tabs v-if="formType !== 'create'" v-model="activeTab" class="mt-10px">
|
||||
<el-tab-pane label="设备资源" name="machine">
|
||||
<WorkstationMachineList :workstation-id="formData.id!" />
|
||||
<WorkstationMachineList :workstation-id="formData.id!" :formType="formType" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="工装夹具" name="tool">
|
||||
<WorkstationToolList :workstation-id="formData.id!" />
|
||||
<WorkstationToolList :workstation-id="formData.id!" :formType="formType" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="人力资源" name="worker">
|
||||
<WorkstationWorkerList :workstation-id="formData.id!" />
|
||||
<WorkstationWorkerList :workstation-id="formData.id!" :formType="formType" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!isDetail">
|
||||
确 定
|
||||
</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
|
|
@ -129,12 +142,14 @@
|
|||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MdWorkstationApi, MdWorkstationVO } from '@/api/mes/md/workstation'
|
||||
import MdWorkshopSelect from '@/views/mes/md/workstation/components/MdWorkshopSelect.vue'
|
||||
import ProProcessSelect from '@/views/mes/pro/process/components/ProProcessSelect.vue'
|
||||
import WmWarehouseSelect from '@/views/mes/wm/warehouse/components/WmWarehouseSelect.vue'
|
||||
import { WmWarehouseVO } from '@/api/mes/wm/warehouse'
|
||||
import { WmWarehouseLocationApi, WmWarehouseLocationVO } from '@/api/mes/wm/warehouse/location'
|
||||
import { WmWarehouseAreaApi, WmWarehouseAreaVO } from '@/api/mes/wm/warehouse/area'
|
||||
import { CommonStatusEnum } from '@/utils/constants'
|
||||
import { generateRandomStr } from '@/utils'
|
||||
import { MesAutoCodeRuleCode } from '@/views/mes/utils/constants'
|
||||
import { AutoCodeRecordApi } from '@/api/mes/md/autocode/record'
|
||||
import WorkstationMachineList from './WorkstationMachineList.vue'
|
||||
import WorkstationToolList from './WorkstationToolList.vue'
|
||||
import WorkstationWorkerList from './WorkstationWorkerList.vue'
|
||||
|
|
@ -147,7 +162,8 @@ const message = useMessage() // 消息弹窗
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改;detail - 详情
|
||||
const isDetail = computed(() => formType.value === 'detail')
|
||||
const activeTab = ref('machine') // 当前激活的资源 Tab
|
||||
const locationList = ref<WmWarehouseLocationVO[]>([]) // 库区下拉列表
|
||||
const areaList = ref<WmWarehouseAreaVO[]>([]) // 库位下拉列表
|
||||
|
|
@ -168,13 +184,16 @@ const formRules = reactive({
|
|||
code: [{ required: true, message: '工作站编码不能为空', trigger: 'blur' }],
|
||||
name: [{ required: true, message: '工作站名称不能为空', trigger: 'blur' }],
|
||||
workshopId: [{ required: true, message: '所在车间不能为空', trigger: 'change' }],
|
||||
processId: [{ required: true, message: '所属工序不能为空', trigger: 'change' }],
|
||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
||||
}) // 表单校验规则
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 生成工作站编码 */
|
||||
const generateCode = () => {
|
||||
formData.value.code = 'WS' + generateRandomStr(12)
|
||||
const generateCode = async () => {
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(
|
||||
MesAutoCodeRuleCode.MD_WORKSTATION_CODE
|
||||
)
|
||||
}
|
||||
|
||||
/** 加载库区列表 */
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@
|
|||
<template>
|
||||
<div>
|
||||
<!-- 操作栏 -->
|
||||
<el-button type="primary" plain size="small" @click="openForm('create')" class="mb-10px">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
size="small"
|
||||
@click="openForm('create')"
|
||||
class="mb-10px"
|
||||
v-if="!isDetail"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 添加设备
|
||||
</el-button>
|
||||
<!-- 列表 -->
|
||||
|
|
@ -11,7 +18,7 @@
|
|||
<el-table-column label="设备名称" align="center" prop="machineryName" />
|
||||
<el-table-column label="数量" align="center" prop="quantity" width="100" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" width="80">
|
||||
<el-table-column label="操作" align="center" width="80" v-if="!isDetail">
|
||||
<template #default="scope">
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
|
||||
</template>
|
||||
|
|
@ -20,7 +27,13 @@
|
|||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="500px">
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="80px" v-loading="formLoading">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="80px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="设备" prop="machineryId">
|
||||
<!-- TODO @芋艿:对接设备下拉列表,等 DV 设备模块完成后对接 -->
|
||||
<el-input-number
|
||||
|
|
@ -56,10 +69,12 @@ defineOptions({ name: 'WorkstationMachineList' })
|
|||
|
||||
const props = defineProps<{
|
||||
workstationId: number // 工作站编号
|
||||
formType: string // 业务表单的类型
|
||||
}>()
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const isDetail = computed(() => props.formType === 'detail') // 是否详情模式(只读)
|
||||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref<MdWorkstationMachineVO[]>([]) // 列表的数据
|
||||
|
|
@ -77,7 +92,7 @@ const getList = async () => {
|
|||
// ==================== 添加/修改 ====================
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const dialogFormType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formRef = ref() // 表单 Ref
|
||||
const formData = ref({
|
||||
|
|
@ -96,7 +111,7 @@ const formRules = reactive({
|
|||
const openForm = (type: string) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
dialogFormType.value = type
|
||||
resetForm()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@
|
|||
<template>
|
||||
<div>
|
||||
<!-- 操作栏 -->
|
||||
<el-button type="primary" plain size="small" @click="openForm('create')" class="mb-10px">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
size="small"
|
||||
@click="openForm('create')"
|
||||
class="mb-10px"
|
||||
v-if="!isDetail"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 添加工具
|
||||
</el-button>
|
||||
<!-- 列表 -->
|
||||
|
|
@ -11,7 +18,7 @@
|
|||
<el-table-column label="工具类型名称" align="center" prop="toolTypeName" />
|
||||
<el-table-column label="数量" align="center" prop="quantity" width="100" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" width="120">
|
||||
<el-table-column label="操作" align="center" width="120" v-if="!isDetail">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row)">编辑</el-button>
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
|
||||
|
|
@ -34,7 +41,7 @@
|
|||
v-model="formData.toolTypeId"
|
||||
placeholder="请输入工具类型编号"
|
||||
class="!w-1/1"
|
||||
:disabled="formType === 'update'"
|
||||
:disabled="dialogFormType === 'update'"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数量" prop="quantity">
|
||||
|
|
@ -64,10 +71,12 @@ defineOptions({ name: 'WorkstationToolList' })
|
|||
|
||||
const props = defineProps<{
|
||||
workstationId: number // 工作站编号
|
||||
formType: string // 业务表单的类型
|
||||
}>()
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const isDetail = computed(() => props.formType === 'detail') // 是否详情模式(只读)
|
||||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref<MdWorkstationToolVO[]>([]) // 列表的数据
|
||||
|
|
@ -85,7 +94,7 @@ const getList = async () => {
|
|||
// ==================== 添加/修改 ====================
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const dialogFormType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formRef = ref() // 表单 Ref
|
||||
const formData = ref({
|
||||
|
|
@ -104,7 +113,7 @@ const formRules = reactive({
|
|||
const openForm = (type: string, row?: MdWorkstationToolVO) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
dialogFormType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (type === 'update' && row) {
|
||||
|
|
@ -122,7 +131,7 @@ const submitForm = async () => {
|
|||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MdWorkstationToolVO
|
||||
if (formType.value === 'create') {
|
||||
if (dialogFormType.value === 'create') {
|
||||
await MdWorkstationToolApi.createWorkstationTool(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@
|
|||
<template>
|
||||
<div>
|
||||
<!-- 操作栏 -->
|
||||
<el-button type="primary" plain size="small" @click="openForm('create')" class="mb-10px">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
size="small"
|
||||
@click="openForm('create')"
|
||||
class="mb-10px"
|
||||
v-if="!isDetail"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 添加人员
|
||||
</el-button>
|
||||
<!-- 列表 -->
|
||||
|
|
@ -11,7 +18,7 @@
|
|||
<el-table-column label="岗位名称" align="center" prop="postName" />
|
||||
<el-table-column label="数量" align="center" prop="quantity" width="100" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" width="120">
|
||||
<el-table-column label="操作" align="center" width="120" v-if="!isDetail">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row)">编辑</el-button>
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
|
||||
|
|
@ -21,13 +28,15 @@
|
|||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="500px">
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="80px" v-loading="formLoading">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="80px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="岗位" prop="postId">
|
||||
<el-select
|
||||
v-model="formData.postId"
|
||||
placeholder="请选择岗位"
|
||||
class="!w-1/1"
|
||||
>
|
||||
<el-select v-model="formData.postId" placeholder="请选择岗位" class="!w-1/1">
|
||||
<el-option
|
||||
v-for="post in postList"
|
||||
:key="post.id"
|
||||
|
|
@ -64,10 +73,12 @@ defineOptions({ name: 'WorkstationWorkerList' })
|
|||
|
||||
const props = defineProps<{
|
||||
workstationId: number // 工作站编号
|
||||
formType: string // 业务表单的类型
|
||||
}>()
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const isDetail = computed(() => props.formType === 'detail') // 是否详情模式(只读)
|
||||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref<MdWorkstationWorkerVO[]>([]) // 列表的数据
|
||||
|
|
@ -86,7 +97,7 @@ const getList = async () => {
|
|||
// ==================== 添加/修改 ====================
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const dialogFormType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formRef = ref() // 表单 Ref
|
||||
const formData = ref({
|
||||
|
|
@ -105,7 +116,7 @@ const formRules = reactive({
|
|||
const openForm = async (type: string, row?: MdWorkstationWorkerVO) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
dialogFormType.value = type
|
||||
resetForm()
|
||||
// 加载岗位列表
|
||||
postList.value = await PostApi.getSimplePostList()
|
||||
|
|
@ -125,7 +136,7 @@ const submitForm = async () => {
|
|||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MdWorkstationWorkerVO
|
||||
if (formType.value === 'create') {
|
||||
if (dialogFormType.value === 'create') {
|
||||
await MdWorkstationWorkerApi.createWorkstationWorker(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@
|
|||
<el-form-item label="所在车间" prop="workshopId">
|
||||
<MdWorkshopSelect v-model="queryParams.workshopId" placeholder="请选择车间" clearable class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属工序" prop="processId">
|
||||
<ProProcessSelect v-model="queryParams.processId" placeholder="请选择工序" clearable 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
|
||||
|
|
@ -66,11 +69,17 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="工作站编码" align="center" prop="code" min-width="120" />
|
||||
<el-table-column label="工作站编码" align="center" prop="code" min-width="120">
|
||||
<template #default="scope">
|
||||
<el-link type="primary" @click="openForm('detail', scope.row.id)">
|
||||
{{ scope.row.code }}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作站名称" align="center" prop="name" min-width="150" />
|
||||
<el-table-column label="工作站地点" align="center" prop="address" min-width="150" />
|
||||
<el-table-column label="所在车间" align="center" prop="workshopName" min-width="120" />
|
||||
<!-- TODO @芋艿:所属工序,等工序模块完成后对接 -->
|
||||
<el-table-column label="所属工序" align="center" prop="processName" min-width="120" />
|
||||
<el-table-column label="状态" align="center" prop="status" min-width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
||||
|
|
@ -101,6 +110,7 @@
|
|||
>
|
||||
删除
|
||||
</el-button>
|
||||
<!-- TODO @芋艿:【对齐】后续搞:标签打印 -->
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
|
|
@ -132,6 +142,7 @@ import { dateFormatter } from '@/utils/formatTime'
|
|||
import download from '@/utils/download'
|
||||
import { MdWorkstationApi, MdWorkstationVO } from '@/api/mes/md/workstation'
|
||||
import MdWorkshopSelect from './components/MdWorkshopSelect.vue'
|
||||
import ProProcessSelect from '@/views/mes/pro/process/components/ProProcessSelect.vue'
|
||||
import WorkstationForm from './WorkstationForm.vue'
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { BarcodeDetail } from '@/views/mes/wm/barcode/components'
|
||||
|
|
@ -151,6 +162,7 @@ const queryParams = reactive({
|
|||
code: undefined,
|
||||
name: undefined,
|
||||
workshopId: undefined,
|
||||
processId: undefined,
|
||||
status: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
|
|||
|
|
@ -416,6 +416,7 @@ export const MesAutoCodeRuleCode = {
|
|||
MD_ITEM_CODE: 'MD_ITEM_CODE', // 物料编码
|
||||
MD_VENDOR_CODE: 'MD_VENDOR_CODE', // 供应商编码
|
||||
MD_CLIENT_CODE: 'MD_CLIENT_CODE', // 客户编码
|
||||
MD_WORKSTATION_CODE: 'MD_WORKSTATION_CODE', // 工作站编码
|
||||
WM_SN_CODE: 'WM_SN_CODE', // SN 码
|
||||
WM_PACKAGE_CODE: 'WM_PACKAGE_CODE', // 装箱单编码
|
||||
WM_BATCH_CODE: 'WM_BATCH_CODE', // 批次编码
|
||||
|
|
|
|||
|
|
@ -118,7 +118,12 @@
|
|||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="formData.status" placeholder="请选择" class="!w-1/1" :disabled="isDetail">
|
||||
<el-select
|
||||
v-model="formData.status"
|
||||
placeholder="请选择"
|
||||
class="!w-1/1"
|
||||
:disabled="isDetail"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
||||
:key="dict.value"
|
||||
|
|
@ -149,15 +154,22 @@
|
|||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" :disabled="isDetail" />
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
type="textarea"
|
||||
placeholder="请输入备注"
|
||||
:disabled="isDetail"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<!-- TODO @芋艿:barcodeimg -->
|
||||
<el-button v-if="!isDetail" @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">{{ isDetail ? '关 闭' : '取 消' }}</el-button>
|
||||
<el-button v-if="!isDetail" @click="submitForm" type="primary" :disabled="formLoading">
|
||||
确 定
|
||||
</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in New Issue