设备备件

main
kkk-ops 3 weeks ago
parent b0c3744491
commit f72f4f14d8

@ -1,5 +1,6 @@
import request from '@/config/axios'
import { CriticalComponentVO } from '@/api/mes/criticalComponent'
import { ProductVO } from '@/api/erp/product/product'
// 设备类型 VO
export interface DeviceLedgerVO {
id: number // id
@ -23,6 +24,9 @@ export interface DeviceLedgerVO {
remark: string // 备注
fileUrl?: string // 附件下载
componentId?: string // 关键件ids集合
componentList?: CriticalComponentVO[]
beijianId?: string // 备件ids集合
beijianList?: ProductVO[]
inspectionList?: any[]
maintainList?: any[]
creator?: string // 创建人

@ -34,7 +34,7 @@ export const PlanMaintenanceApi = {
},
updatePlanMaintenance: async (data: any) => {
return await request.put({ url: `/mes/plan-maintenance/update`, params: data })
return await request.put({ url: `/mes/plan-maintenance/update`, data })
},
deletePlanMaintenance: async (ids: string) => {

@ -2,7 +2,7 @@
<Dialog :title="dialogTitle" v-model="dialogVisible" width="720px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="90px" v-loading="formLoading">
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入编码" clearable />
<el-input v-model="formData.code" placeholder="请输入编码" clearable :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" clearable />

@ -8,15 +8,15 @@
v-loading="formLoading"
>
<el-row :gutter="16">
<el-col :span="24">
<!-- <el-col :span="24">
<el-form-item label="资产编号" prop="id">
<el-input v-model="formData.id" placeholder="系统自动生成" disabled />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="12">
<el-form-item label="编码" prop="deviceCode" required>
<el-input v-model="formData.deviceCode" placeholder="请输入编码" />
<el-input :disabled = "formType == 'update'" v-model="formData.deviceCode" placeholder="请输入编码" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -40,12 +40,12 @@
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="品牌" prop="deviceBrand">
<el-input v-model="formData.deviceBrand" placeholder="请输入品牌" />
</el-form-item>
</el-col>
<el-col :span="12">
</el-col> -->
<el-col :span="24">
<el-form-item label="型号" prop="deviceModel">
<el-input v-model="formData.deviceModel" placeholder="请输入型号" />
</el-form-item>
@ -57,19 +57,19 @@
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="供应商" prop="supplier">
<el-input v-model="formData.supplier" placeholder="请输入供应商" />
<el-input v-model="formData.supplier" placeholder="请输入供应商" /> -->
<!--
<el-select v-model="formData.supplier" placeholder="请选择供应商" clearable filterable class="!w-full">
<el-option v-for="item in supplierOptions" :key="item" :label="item" :value="item" />
</el-select>
-->
</el-form-item>
<!-- </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属车间" prop="workshop">
<el-input v-model="formData.workshop" placeholder="请输入所属车间" />
<el-input v-model="formData.workshop" placeholder="请输入所属车间" /> -->
<!--
<el-tree-select
v-model="formData.workshop"
@ -82,8 +82,8 @@
class="!w-full"
/>
-->
</el-form-item>
</el-col>
<!-- </el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="生产日期" prop="productionDate" required>
@ -103,9 +103,9 @@
</el-form-item>
</el-col>
<el-col :span="24">
<!-- <el-col :span="24">
<el-form-item label="所属系统组织" prop="systemOrg">
<el-input v-model="formData.systemOrg" placeholder="请输入所属系统组织" />
<el-input v-model="formData.systemOrg" placeholder="请输入所属系统组织" /> -->
<!--
<el-tree-select
v-model="formData.systemOrg"
@ -118,8 +118,8 @@
class="!w-full"
/>
-->
</el-form-item>
</el-col>
<!-- </el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="责任人" prop="deviceManagerIds">
@ -162,6 +162,26 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备件" prop="beijianIds">
<el-select
v-model="formData.beijianIds"
multiple
filterable
clearable
placeholder="请选择备件"
class="!w-full"
>
<el-option
v-for="item in beijianOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="资料" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
@ -183,6 +203,7 @@ import { DeviceTypeApi, DeviceTypeTreeVO } from '@/api/mes/devicetype'
import { getSimpleUserList, UserVO } from '@/api/system/user'
import { formatDate } from '@/utils/formatTime'
import type { FormRules } from 'element-plus'
import { ProductApi } from '@/api/erp/product/product'
/** 设备类型 表单 */
defineOptions({ name: 'DeviceLedgerForm' })
@ -237,6 +258,7 @@ const initFormData = () => ({
factoryEntryDate: undefined,
remark: undefined,
componentIds: [] as number[],
beijianIds: [] as number[],
fileUrl: undefined,
sort: undefined
})
@ -257,12 +279,14 @@ const treeSelectProps = { label: 'name', children: 'children' }
const deviceTypeTree = ref<DeviceTypeTreeVO[]>([])
const users = ref<UserVO[]>([])
const criticalComponentOptions = ref<{ label: string; value: number }[]>([])
const beijianOptions = ref<{ label: string; value: number }[]>([])
const ensureOptionsLoaded = async () => {
const [deviceTypeRes, userRes, criticalRes] = await Promise.all([
const [deviceTypeRes, userRes, criticalRes, beijianRes] = await Promise.all([
DeviceTypeApi.getDeviceTypeTree({ pageNo: 1, pageSize: 10 }),
getSimpleUserList(),
CriticalComponentApi.getCriticalComponentPage({})
CriticalComponentApi.getCriticalComponentPage({}),
ProductApi.getComponentSimpleList()
])
deviceTypeTree.value = deviceTypeRes
users.value = userRes ?? []
@ -272,6 +296,12 @@ const ensureOptionsLoaded = async () => {
const label = code && name ? `${code}-${name}` : name || code || String(item.id)
return { label, value: Number(item.id) }
})
beijianOptions.value = (beijianRes ?? []).map((item: any) => {
const code = item.barCode ? String(item.barCode) : ''
const name = item.name ? String(item.name) : ''
const label = code && name ? `${code}-${name}` : name || code || String(item.id)
return { label, value: Number(item.id) }
})
}
/** 打开弹窗 */
@ -296,7 +326,8 @@ const open = async (type: string, id?: number, defaultDeviceTypeId?: number) =>
deviceManagerIds: parseIdsValue((detail as any)?.deviceManager),
productionDate: normalizeYmd((detail as any)?.productionDate),
factoryEntryDate: normalizeYmd((detail as any)?.factoryEntryDate),
componentIds: parseIdsValue((detail as any)?.componentId)
componentIds: parseIdsValue((detail as any)?.componentId),
beijianIds: parseIdsValue((detail as any)?.beijianId),
}
} finally {
formLoading.value = false
@ -318,10 +349,12 @@ const submitForm = async () => {
productionDate: normalizeYmd(formData.value.productionDate),
factoryEntryDate: normalizeYmd(formData.value.factoryEntryDate),
deviceManager: formData.value.deviceManagerIds?.length ? formData.value.deviceManagerIds.join(',') : undefined,
componentId: formData.value.componentIds?.length ? formData.value.componentIds.join(',') : undefined
componentId: formData.value.componentIds?.length ? formData.value.componentIds.join(',') : undefined,
beijianId: formData.value.beijianIds?.length ? formData.value.beijianIds.join(',') : undefined
} as unknown as DeviceLedgerVO
delete (data as any).deviceManagerIds
delete (data as any).componentIds
delete (data as any).beijianIds
if (formType.value === 'create') {
await DeviceLedgerApi.createDeviceLedger(data)
message.success(t('common.createSuccess'))

@ -56,9 +56,9 @@ ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-to
{{ (queryParams.pageNo - 1) * queryParams.pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="编码" align="center" prop="deviceCode" />
<el-table-column label="名称" align="center" prop="deviceName" />
<el-table-column label="类型" align="center" prop="deviceType">
<el-table-column label="编码" align="center" prop="deviceCode" min-width="110px"/>
<el-table-column label="名称" align="center" prop="deviceName" min-width="120px"/>
<el-table-column label="类型" align="center" prop="deviceType" min-width="110px">
<template #default="scope">
<el-tag effect="light">
{{ getDeviceTypeName(scope.row.deviceTypeName ?? scope.row.deviceType) }}
@ -77,20 +77,20 @@ ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-to
</el-table-column>
<el-table-column label="规格" align="center" prop="deviceSpec" />
<el-table-column label="型号" align="center" prop="deviceModel" />
<el-table-column label="品牌" align="center" prop="deviceBrand" />
<!-- <el-table-column label="品牌" align="center" prop="deviceBrand" /> -->
<el-table-column
label="生产日期" align="center" prop="productionDate" :formatter="dateFormatter2"
width="140px" />
<el-table-column
label="入厂日期" align="center" prop="factoryEntryDate" :formatter="dateFormatter2"
width="140px" />
<el-table-column label="供应商" align="center" prop="supplier" width="110px" />
<el-table-column label="所属车间" align="center" prop="workshop" width="110px" />
<el-table-column label="位置" align="center" prop="deviceLocation" />
<el-table-column label="使用部门" align="center" prop="systemOrg" width="110px" />
<el-table-column label="责任人" align="center" prop="deviceManagerName" width="110px" />
<!-- <el-table-column label="供应商" align="center" prop="supplier" width="110px" /> -->
<!-- <el-table-column label="所属车间" align="center" prop="workshop" width="110px" /> -->
<el-table-column label="位置" align="center" prop="deviceLocation" min-width="150px"/>
<!-- <el-table-column label="使用部门" align="center" prop="systemOrg" width="110px" /> -->
<el-table-column label="责任人" align="center" prop="deviceManagerName" width="150px" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建人" align="center" prop="creatorName" width="120px" />
<el-table-column label="创建人" align="center" prop="creatorName" width="150px" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="更新时间" align="center" prop="updateTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" min-width="160px" fixed="right">
@ -333,6 +333,39 @@ link type="danger" @click="handleDelete(scope.row.id)"
</el-collapse-item>
</el-collapse>
</el-tab-pane>
<el-tab-pane label="关键件" name="criticalComponent">
<el-table v-loading="loading" :data="detailData?.componentList" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="编码" align="center" prop="code" min-width="140" />
<el-table-column label="名称" align="center" prop="name" min-width="140" />
<el-table-column label="描述" align="center" prop="description" min-width="180" />
<el-table-column label="备注" align="center" prop="remark" min-width="180" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane>
<el-tab-pane label="备件" name="component">
<el-table v-loading="loading" :data="detailData?.beijianList" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="备件编码" align="center" prop="barCode" />
<el-table-column label="备件名称" align="left" prop="name" width="220px"/>
<!-- <el-table-column v-if="checkPermi(['erp:component:standard'])" label="规格" align="center" prop="standard" /> -->
<el-table-column label="分类" align="center" prop="categoryName" />
<el-table-column label="单位" align="center" prop="unitName" />
<!-- <el-table-column label="预警库存" align="center" prop="safetyNumber" /> -->
<!-- <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column> -->
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
</div>

@ -128,7 +128,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const isRepairMode = computed(() => formType.value === 'repair')
const isRepairMode = computed(() => formType.value === 'update' || formType.value === 'repair')
const showRepairFields = computed(() => formType.value === 'update' || formType.value === 'repair')
const repairFieldsDisabled = computed(() => formType.value !== 'repair')
const isHydrating = ref(false)

@ -16,17 +16,17 @@
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="项目编码" min-width="150">
<el-table-column label="维修编码" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectCode`" :rules="formRules.subjectCode" class="mb-0px!">
<el-input v-model="row.subjectCode" placeholder="" />
<el-input v-model="row.subjectCode" placeholder="请输入维修编码" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="项目名称" min-width="150">
<el-table-column label="维修名称" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectName`" :rules="formRules.subjectName" class="mb-0px!">
<el-input v-model="row.subjectName" placeholder="" />
<el-input v-model="row.subjectName" placeholder="请输入维修名称" />
</el-form-item>
</template>
</el-table-column>
@ -37,10 +37,10 @@
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="项目内容" min-width="300">
<el-table-column label="维修内容" min-width="300">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectContent`" :rules="formRules.subjectContent" class="mb-0px!">
<el-input type="textarea" v-model="row.subjectContent" placeholder="请输入项目内容" />
<el-input type="textarea" v-model="row.subjectContent" placeholder="请输入维修内容" />
</el-form-item>
</template>
</el-table-column>
@ -87,7 +87,7 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3">
<el-button @click="handleAdd" round>+ 添加设备维修记录行</el-button>
<el-button @click="handleAdd" round>+ 添加维修项目</el-button>
</el-row>
</template>
<script setup lang="ts">

@ -8,7 +8,7 @@
v-loading="formLoading"
>
<el-form-item label="项目编码" prop="subjectCode">
<el-input v-model="formData.subjectCode" placeholder="请输入项目编码" />
<el-input v-model="formData.subjectCode" placeholder="请输入项目编码" :disabled = "formType === 'update'"/>
</el-form-item>
<el-form-item label="项目名称" prop="subjectName">
<el-input v-model="formData.subjectName" placeholder="请输入项目名称" />
@ -140,7 +140,7 @@ const resetForm = () => {
id: undefined,
subjectCode: undefined,
subjectName: undefined,
isEnable: undefined,
isEnable: true,
inspectionMethod: undefined,
valueType: undefined,
judgmentCriteria: undefined,

@ -1,5 +1,5 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1080">
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200">
<el-form
ref="formRef"
:model="formData"
@ -9,12 +9,31 @@
:disabled="disabled"
>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="出库类型" prop="outType">
<el-select
v-model="formData.outType"
clearable
filterable
placeholder="请选择出库类型"
class="!w-1/1"
disabled
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出库单号" prop="no">
<el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-col :span="8">
<el-form-item label="客户" prop="customerId">
<el-select
v-model="formData.customerId"
@ -31,7 +50,7 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="8">
<el-form-item label="出库时间" prop="outTime">
<el-date-picker
@ -43,27 +62,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出库类型" prop="outType">
<el-select
v-model="formData.outType"
clearable
filterable
placeholder="请选择出库类型"
class="!w-1/1"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input
@ -86,7 +85,7 @@
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="出库产品清单" name="item">
<!-- <StockOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" /> -->
<StockOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
@ -100,7 +99,7 @@
</template>
<script setup lang="ts">
import { StockOutApi, StockOutVO } from '@/api/erp/stock/out'
// import StockOutItemForm from './components/StockOutItemForm.vue'
import StockOutItemForm from './components/StockOutItemForm.vue'
import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from "@/utils/dict";
@ -132,26 +131,8 @@ const formRef = ref() // 表单 Ref
const customerList = ref<CustomerVO[]>([]) //
const options = [
{
value: '其他出库',
label: '其他出库',
},
{
value: '备件出库',
label: '备件出库',
},
{
value: '原料出库',
label: '原料出库',
},
{
value: '产品出库',
label: '产品出库',
},
{
value: '领料出库',
label: '领料出库',
disabled: true,
value: '模具出库',
label: '模具出库',
},
]
@ -212,7 +193,8 @@ const resetForm = () => {
outTime: undefined,
remark: undefined,
fileUrl: undefined,
items: []
items: [],
outType: "模具出库"
}
formRef.value?.resetFields()
}

@ -162,8 +162,8 @@
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="出库单号" align="center" prop="no" />
<el-table-column label="模具信息" align="left" sortable prop="productNames" min-width="180" />
<el-table-column min-width="180" label="领模单号" align="center" prop="no" />
<el-table-column label="模具信息" align="left" sortable prop="productNames" min-width="150" />
<!-- <el-table-column label="客户" align="center" prop="customerName" /> -->
<el-table-column
label="出库时间"

@ -1,4 +1,5 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
@ -8,70 +9,99 @@
:inline="true"
label-width="68px"
>
<el-form-item label="领模单号" prop="orderId">
<el-form-item label="入库单号" prop="no">
<el-input
v-model="queryParams.orderId"
placeholder="请输入领模单号"
v-model="queryParams.no"
placeholder="请选择入库单号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具编码" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入模具编码"
<el-form-item label="模具" prop="productId">
<el-select
v-model="queryParams.productId"
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="state">
<el-input
v-model="queryParams.state"
placeholder="请输入状态"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="归还人" prop="person">
<el-input
v-model="queryParams.person"
placeholder="请输入归还人"
clearable
@keyup.enter="handleQuery"
filterable
placeholder="请选择模具"
class="!w-240px"
/>
>
<el-option
v-for="item in moldList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="入库时间" prop="returnTime">
<el-form-item label="入库时间" prop="outTime">
<el-date-picker
v-model="queryParams.returnTime"
v-model="queryParams.outTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="库管员" prop="principal">
<el-input
v-model="queryParams.principal"
placeholder="请输入库管员"
<!-- <el-form-item label="客户" prop="customerId">
<el-select
v-model="queryParams.customerId"
clearable
@keyup.enter="handleQuery"
filterable
placeholder="请选择客户"
class="!w-240px"
/>
>
<el-option
v-for="item in customerList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> -->
<el-form-item label="仓库" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
class="!w-240px"
>
<el-option
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="创建人" prop="creator">
<el-select
v-model="queryParams.creator"
clearable
filterable
placeholder="请选择创建人"
class="!w-240px"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</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.ERP_AUDIT_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
@ -82,17 +112,6 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</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>
@ -100,7 +119,7 @@
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:mold-return:create']"
v-hasPermi="['erp:stock-out:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
@ -109,54 +128,112 @@
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:mold-return:export']"
v-hasPermi="['erp:stock-out:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
<el-button
type="danger"
plain
@click="handleDelete(selectionList.map((item) => item.id))"
v-hasPermi="['erp:stock-out:delete']"
:disabled="selectionList.length === 0"
>
<Icon icon="ep:delete" 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="ID" align="center" prop="id" />
<el-table-column label="领模单号" align="center" prop="orderId" />
<el-table-column label="模具编码" align="center" prop="code" />
<el-table-column label="模具名称" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="state" />
<el-table-column label="归还人" align="center" prop="person" />
<!-- <el-tabs v-model="activeName" @tab-click="handleTabClick"> -->
<!-- <el-tab-pane label="产品出库" name="产品出库" />
<el-tab-pane label="原料出库" name="原料出库" />
<el-tab-pane label="备件出库" name="备件出库" />
<el-tab-pane label="其他出库" name="其他出库" />
<el-tab-pane label="领模出库" name="领料出库" />
</el-tabs> -->
<el-table
v-loading="loading"
:data="list"
:stripe="true"
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="入库单号" align="center" prop="no" />
<el-table-column label="模具信息" align="left" sortable prop="productNames" min-width="150" />
<!-- <el-table-column label="客户" align="center" prop="customerName" /> -->
<el-table-column
label="入库时间"
align="center"
prop="returnTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="库管员" align="center" prop="principal" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
sortable
prop="outTime"
:formatter="dateFormatter2"
width="120px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<el-table-column label="创建人" align="center" prop="creatorName" />
<!-- <el-table-column
label="数量"
align="right"
sortable
prop="totalCount"
:formatter="erpCountTableColumnFormatter"
/> -->
<!-- <el-table-column
label="金额"
align="right"
sortable
prop="totalPrice"
:formatter="erpPriceTableColumnFormatter"
/> -->
<el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="220">
<template #default="scope">
<el-button
link
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-out:query']"
>
详情
</el-button>
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:mold-return:update']"
v-hasPermi="['erp:stock-out:update']"
:disabled="scope.row.status === 20"
>
编辑
</el-button>
<el-button
link
type="primary"
@click="handleUpdateStatus(scope.row.id, 20)"
v-hasPermi="['erp:stock-out:update-status']"
v-if="scope.row.status === 10"
>
审批
</el-button>
<el-button
link
type="danger"
@click="handleUpdateStatus(scope.row.id, 10)"
v-hasPermi="['erp:stock-out:update-status']"
v-else
>
反审批
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:mold-return:delete']"
@click="handleDelete([scope.row.id])"
v-hasPermi="['erp:stock-out:delete']"
>
删除
</el-button>
@ -177,41 +254,53 @@
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldReturnApi, MoldReturnVO } from '@/api/mes/moldreturn'
import { StockOutApi, StockOutVO } from '@/api/erp/stock/out'
import MoldReturnForm from './MoldReturnForm.vue'
import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { MoldBrandApi, MoldVO } from '@/api/erp/mold'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
import { UserVO } from '@/api/system/user'
import * as UserApi from '@/api/system/user'
import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
/** 模具管理-模具入库 列表 */
defineOptions({ name: 'MoldReturn' })
/** ERP 其它出库单列表 */
defineOptions({ name: 'MoldGet' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<MoldReturnVO[]>([]) //
const list = ref<StockOutVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
orderId: undefined,
code: undefined,
name: undefined,
state: undefined,
person: undefined,
returnTime: [],
principal: undefined,
no: undefined,
productId: undefined,
customerId: undefined,
outType: '领模出库',
warehouseId: undefined,
outTime: [],
status: 10,
remark: undefined,
createTime: [],
creator: undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const productList = ref<ProductVO[]>([]) //
const warehouseList = ref<WarehouseVO[]>([]) //
const customerList = ref<CustomerVO[]>([]) //
const userList = ref<UserVO[]>([]) //
const moldList = ref<MoldVO[]>([]) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await MoldReturnApi.getMoldReturnPage(queryParams)
const data = await StockOutApi.getStockOutPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
@ -238,15 +327,29 @@ const openForm = (type: string, id?: number) => {
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
const handleDelete = async (ids: number[]) => {
try {
//
await message.delConfirm()
//
await MoldReturnApi.deleteMoldReturn(id)
await StockOutApi.deleteStockOut(ids)
message.success(t('common.delSuccess'))
//
await getList()
selectionList.value = selectionList.value.filter((item) => !ids.includes(item.id))
} catch {}
}
/** 审批/反审批操作 */
const handleUpdateStatus = async (id: number, status: number) => {
try {
//
await message.confirm(`确定${status === 20 ? '审批' : '反审批'}该出库单吗?`)
//
await StockOutApi.updateStockOutStatus(id, status)
message.success(`${status === 20 ? '审批' : '反审批'}成功`)
//
await getList()
} catch {}
}
@ -257,16 +360,40 @@ const handleExport = async () => {
await message.exportConfirm()
//
exportLoading.value = true
const data = await MoldReturnApi.exportMoldReturn(queryParams)
download.excel(data, '模具管理-模具入库.xls')
const data = await StockOutApi.exportStockOut(queryParams)
download.excel(data, '其它出库单.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 选中操作 */
const selectionList = ref<StockOutVO[]>([])
const handleSelectionChange = (rows: StockOutVO[]) => {
selectionList.value = rows
}
const query = reactive({
brandId: undefined
})
/** 初始化 **/
onMounted(() => {
getList()
onMounted(async () => {
queryParams.outType ='领模出库'
await getList()
//
// productList.value = await ProductApi.getProductSimpleList()
moldList.value = await MoldBrandApi.getMoldAllList()
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
customerList.value = await CustomerApi.getCustomerSimpleList()
userList.value = await UserApi.getSimpleUserList()
})
</script>
// TODO
// TODO
/** tab 切换 */
let activeName = '产品出库'
const handleTabClick = (tab: TabsPaneContext) => {
queryParams.outType = tab.paneName
handleQuery()
}
</script>

@ -8,7 +8,7 @@
<el-form-item label="方案类型" prop="planType" required>
<el-select v-model="formData.planType" placeholder="请选择方案类型" class="!w-full">
<el-option :value="1" label="保养" />
<el-option :value="2" label="维护" />
<el-option :value="2" label="点检" />
</el-select>
</el-form-item>

@ -13,7 +13,7 @@
<el-form-item label="类型" prop="planType">
<el-select v-model="queryParams.planType" placeholder="请选择类型" clearable class="!w-240px">
<el-option :value="1" label="保养" />
<el-option :value="2" label="维护" />
<el-option :value="2" label="点检" />
</el-select>
</el-form-item>
<el-form-item label="描述" prop="description">
@ -264,7 +264,7 @@ const handleExpandChange = async (row: PlanMaintenanceVO, expandedRows: PlanMain
const getPlanTypeLabel = (value: any) => {
const v = value === '' || value === null || value === undefined ? undefined : Number(value)
if (v === 1) return '保养'
if (v === 2) return '维护'
if (v === 2) return '点检'
return value ?? ''
}

@ -1,11 +1,11 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="900px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="项目编码" prop="subjectCode">
<el-input v-model="formData.subjectCode" placeholder="请输入项目编码" />
<el-form-item label="维修编码" prop="subjectCode">
<el-input v-model="formData.subjectCode" placeholder="请输入维修编码" />
</el-form-item>
<el-form-item label="项目名称" prop="subjectName">
<el-input v-model="formData.subjectName" placeholder="请输入项目名称" />
<el-form-item label="维修名称" prop="subjectName">
<el-input v-model="formData.subjectName" placeholder="请输入维修名称" />
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-radio-group v-model="formData.deviceType">
@ -54,8 +54,8 @@
<el-input v-model="formData.judgmentCriteria" placeholder="请输入判定基准" type="textarea" />
</el-form-item>
-->
<el-form-item label="项目内容" prop="projectContent">
<el-input v-model="formData.projectContent" placeholder="请输入项目内容" type="textarea" />
<el-form-item label="维修内容" prop="projectContent">
<el-input v-model="formData.projectContent" placeholder="请输入维修内容" type="textarea" />
</el-form-item>
<el-form-item label="是否启用" prop="isEnable">
<el-radio-group v-model="formData.isEnable">
@ -298,7 +298,7 @@ const resetForm = () => {
valueType: undefined,
judgmentCriteria: undefined,
projectContent: undefined,
isEnable: undefined
isEnable: true
}
deviceOptions.value = []
componentOptions.value = []

@ -1,11 +1,11 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="编码" prop="subjectCode">
<el-input v-model="queryParams.subjectCode" placeholder="请输入项目编码" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="维修编码" prop="subjectCode">
<el-input v-model="queryParams.subjectCode" placeholder="请输入维修编码" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="名称" prop="subjectName">
<el-input v-model="queryParams.subjectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="维修名称" prop="subjectName">
<el-input v-model="queryParams.subjectName" placeholder="请输入维修名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-select v-model="queryParams.deviceType" placeholder="请选择设备类型" clearable filterable class="!w-240px">
@ -33,10 +33,10 @@
/>
</el-form-item>
-->
<el-form-item label="项目内容" prop="projectContent">
<el-form-item label="维修内容" prop="projectContent">
<el-input
v-model="queryParams.projectContent"
placeholder="请输入项目内容"
placeholder="请输入维修内容"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
@ -72,8 +72,8 @@
<ContentWrap>
<el-table ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" row-key="id" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="编码" align="center" prop="subjectCode" min-width="130" :formatter="cellOrDash" />
<el-table-column label="名称" align="center" prop="subjectName" min-width="160" :formatter="cellOrDash" />
<el-table-column label="维修编码" align="center" prop="subjectCode" min-width="130" :formatter="cellOrDash" />
<el-table-column label="维修名称" align="center" prop="subjectName" min-width="160" :formatter="cellOrDash" />
<el-table-column label="设备类型" align="center" prop="deviceType" min-width="140">
<template #default="scope">
<el-tag effect="light">{{ getDeviceTypeName(scope.row.deviceType) }}</el-tag>
@ -94,7 +94,7 @@
</el-table-column>
<el-table-column label="判定基准" align="center" prop="judgmentCriteria" min-width="180" />
-->
<el-table-column label="项目内容" align="center" prop="projectContent" min-width="200" :formatter="cellOrDash" />
<el-table-column label="维修内容" align="center" prop="projectContent" min-width="200" :formatter="cellOrDash" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateOrDash" width="180" />
<el-table-column label="操作" align="center" width="140" fixed="right">
<template #default="scope">

Loading…
Cancel
Save