|
@@ -3,7 +3,7 @@
|
|
<el-form
|
|
<el-form
|
|
ref="formRef"
|
|
ref="formRef"
|
|
:model="formData"
|
|
:model="formData"
|
|
- :rules="formData.type==='in'?formRules:outFormRules"
|
|
|
|
|
|
+ :rules="formData.type === 'in' ? formRules : outFormRules"
|
|
v-loading="formLoading"
|
|
v-loading="formLoading"
|
|
style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
|
|
style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
|
|
label-width="130px"
|
|
label-width="130px"
|
|
@@ -12,10 +12,7 @@
|
|
<el-row>
|
|
<el-row>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-form-item label="设备" prop="deviceName">
|
|
<el-form-item label="设备" prop="deviceName">
|
|
- <el-select
|
|
|
|
- disabled
|
|
|
|
- v-model="formData.deviceName"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-select disabled v-model="formData.deviceName" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
@@ -78,7 +75,13 @@
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-form-item label="维修负责人" prop="maintainPerson">
|
|
<el-form-item label="维修负责人" prop="maintainPerson">
|
|
- <el-select v-model="formData.maintainPerson" filterable clearable style="width: 100%" disabled>
|
|
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="formData.maintainPerson"
|
|
|
|
+ filterable
|
|
|
|
+ clearable
|
|
|
|
+ style="width: 100%"
|
|
|
|
+ disabled
|
|
|
|
+ >
|
|
<el-option
|
|
<el-option
|
|
v-for="item in deptUsers"
|
|
v-for="item in deptUsers"
|
|
:key="item.id"
|
|
:key="item.id"
|
|
@@ -101,20 +104,20 @@
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-form-item label="故障影响" prop="failureInfluence">
|
|
<el-form-item label="故障影响" prop="failureInfluence">
|
|
- <el-input v-model="formData.failureInfluence" disabled/>
|
|
|
|
|
|
+ <el-input v-model="formData.failureInfluence" disabled />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-form-item label="故障系统" prop="failureSystem">
|
|
<el-form-item label="故障系统" prop="failureSystem">
|
|
- <el-input v-model="formData.failureSystem" disabled/>
|
|
|
|
|
|
+ <el-input v-model="formData.failureSystem" disabled />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
- <el-form-item label="图片" prop="pic" >
|
|
|
|
|
|
+ <el-form-item label="图片" prop="pic">
|
|
<UploadImg v-model="formData.pic" :disabled="true" height="55px" />
|
|
<UploadImg v-model="formData.pic" :disabled="true" height="55px" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
- <el-col :span="8" v-if="formData.type === 'out'" >
|
|
|
|
|
|
+ <el-col :span="8" v-if="formData.type === 'out'">
|
|
<el-form-item label="供应商" prop="supplier">
|
|
<el-form-item label="供应商" prop="supplier">
|
|
<el-select
|
|
<el-select
|
|
disabled
|
|
disabled
|
|
@@ -124,7 +127,7 @@
|
|
/>
|
|
/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
- <el-col :span="8" v-if="formData.type === 'out'" >
|
|
|
|
|
|
+ <el-col :span="8" v-if="formData.type === 'out'">
|
|
<el-form-item label="维修费用" prop="maintainFee">
|
|
<el-form-item label="维修费用" prop="maintainFee">
|
|
<el-input-number
|
|
<el-input-number
|
|
disabled
|
|
disabled
|
|
@@ -137,20 +140,19 @@
|
|
/>
|
|
/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
- <el-col :span="8" v-if="formData.type === 'out'" >
|
|
|
|
|
|
+ <el-col :span="8" v-if="formData.type === 'out'">
|
|
<el-form-item label="委外相关附件" prop="outFile">
|
|
<el-form-item label="委外相关附件" prop="outFile">
|
|
<UploadFile disabled="" v-model="formData.outFile" class="min-w-80px" />
|
|
<UploadFile disabled="" v-model="formData.outFile" class="min-w-80px" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
-
|
|
|
|
<el-form-item label="故障描述" prop="description">
|
|
<el-form-item label="故障描述" prop="description">
|
|
<el-input type="textarea" v-model="formData.description" disabled />
|
|
<el-input type="textarea" v-model="formData.description" disabled />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-form-item label="维修描述" prop="maintainDescription">
|
|
<el-form-item label="维修描述" prop="maintainDescription">
|
|
- <el-input type="textarea" v-model="formData.maintainDescription" disabled/>
|
|
|
|
|
|
+ <el-input type="textarea" v-model="formData.maintainDescription" disabled />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
@@ -160,7 +162,7 @@
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-form-item label="备注" prop="remark">
|
|
- <el-input v-model="formData.remark" type="textarea" disabled/>
|
|
|
|
|
|
+ <el-input v-model="formData.remark" type="textarea" disabled />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
@@ -171,22 +173,25 @@
|
|
<!-- 列表 -->
|
|
<!-- 列表 -->
|
|
<ContentWrap>
|
|
<ContentWrap>
|
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
|
- <el-table-column label="物料编码" align="center" prop="code" />
|
|
|
|
- <el-table-column label="物料名称" align="center" prop="name" />
|
|
|
|
- <el-table-column label="单位" align="center" prop="unit" />
|
|
|
|
- <el-table-column label="单价" align="center" prop="price" />
|
|
|
|
- <el-table-column label="消耗数量" align="center" prop="depleteCount">
|
|
|
|
-<!-- <template #default="scope">-->
|
|
|
|
-<!-- <el-input v-model="scope.row.depleteCount" disabled/>-->
|
|
|
|
-<!-- </template>-->
|
|
|
|
- </el-table-column>
|
|
|
|
- <el-table-column label="总库存数量" align="center" prop="totalCount" />
|
|
|
|
- <el-table-column label="备注" align="center" prop="remark">
|
|
|
|
-<!-- <template #default="scope">-->
|
|
|
|
-<!-- <el-input v-model="scope.row.remark" />-->
|
|
|
|
-<!-- </template>-->
|
|
|
|
|
|
+ <el-table-column label="资产编码" align="center" prop="deviceCode" />
|
|
|
|
+ <el-table-column label="设备名称" align="center" prop="deviceName" />
|
|
|
|
+ <el-table-column label="维修项" align="center" prop="name" />
|
|
|
|
+
|
|
|
|
+ <el-table-column label="操作" align="center" min-width="120px">
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <div style="display: flex; justify-content: center; align-items: center; width: 100%">
|
|
|
|
+ <div style="margin-left: 12px">
|
|
|
|
+ <el-button
|
|
|
|
+ link
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="handleViewNew(scope.row.id, scope.row.bomNodeId)"
|
|
|
|
+ >
|
|
|
|
+ 物料详情
|
|
|
|
+ </el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column label="物料来源" align="center" prop="sourceType" />
|
|
|
|
</el-table>
|
|
</el-table>
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
@@ -197,17 +202,25 @@
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
|
|
+ <MaterialListDrawer
|
|
|
|
+ :model-value="drawerVisible"
|
|
|
|
+ @update:model-value="(val) => (drawerVisible = val)"
|
|
|
|
+ :node-id="currentBomNodeId"
|
|
|
|
+ :materials="materialList"
|
|
|
|
+ />
|
|
</template>
|
|
</template>
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from '@/utils/dict'
|
|
|
|
|
|
+import { DICT_TYPE, getBoolDictOptions, getStrDictOptions } from '@/utils/dict'
|
|
import * as UserApi from '@/api/system/user'
|
|
import * as UserApi from '@/api/system/user'
|
|
import { ref } from 'vue'
|
|
import { ref } from 'vue'
|
|
-import {IotMaintainMaterialApi, IotMaintainMaterialVO} from '@/api/pms/maintain/material'
|
|
|
|
|
|
+import { IotMaintainMaterialApi, IotMaintainMaterialVO } from '@/api/pms/maintain/material'
|
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
|
-import {IotMaintainApi} from "@/api/pms/maintain";
|
|
|
|
|
|
+import { IotMaintainApi } from '@/api/pms/maintain'
|
|
|
|
+import MaterialListDrawer from '@/views/pms/iotmainworkorder/SelectedMaterialDrawer.vue'
|
|
|
|
+import { IotMaintainMaterialsApi } from '@/api/pms/maintain/materials'
|
|
|
|
|
|
/** 维修工单 表单 */
|
|
/** 维修工单 表单 */
|
|
-defineOptions({ name: 'IotMaintain' })
|
|
|
|
|
|
+defineOptions({ name: 'IotMaintainDetail' })
|
|
|
|
|
|
const { t } = useI18n() // 国际化
|
|
const { t } = useI18n() // 国际化
|
|
const message = useMessage() // 消息弹窗
|
|
const message = useMessage() // 消息弹窗
|
|
@@ -221,7 +234,9 @@ const drawerVisible = ref<boolean>(false)
|
|
const showDrawer = ref()
|
|
const showDrawer = ref()
|
|
const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
|
|
const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
|
|
const { params, name } = useRoute() // 查询参数
|
|
const { params, name } = useRoute() // 查询参数
|
|
-const id = params.id||props.id
|
|
|
|
|
|
+const id = params.id || props.id
|
|
|
|
+const materialList = ref<any[]>([]) // 保养工单bom关联物料列表
|
|
|
|
+const currentBomNodeId = ref<string>()
|
|
const formData = ref({
|
|
const formData = ref({
|
|
id: undefined,
|
|
id: undefined,
|
|
failureCode: undefined,
|
|
failureCode: undefined,
|
|
@@ -255,7 +270,7 @@ const formRules = reactive({
|
|
type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
|
|
type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
|
|
ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
|
|
ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
|
|
failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
|
|
failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
|
|
- failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
|
|
|
|
|
|
+ // failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
|
|
maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
|
|
maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
|
|
maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
|
|
maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
|
|
maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
|
|
maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
|
|
@@ -274,25 +289,45 @@ const outFormRules = reactive({
|
|
maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
|
|
maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
|
|
deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
|
|
deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
|
|
maintainFee: [{ required: true, message: '维修费用不能为空', trigger: 'blur' }],
|
|
maintainFee: [{ required: true, message: '维修费用不能为空', trigger: 'blur' }],
|
|
- supplier: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
|
|
|
|
|
|
+ supplier: [{ required: true, message: '供应商不能为空', trigger: 'blur' }]
|
|
})
|
|
})
|
|
const formRef = ref() // 表单 Ref
|
|
const formRef = ref() // 表单 Ref
|
|
|
|
|
|
const close = () => {
|
|
const close = () => {
|
|
delView(unref(currentRoute))
|
|
delView(unref(currentRoute))
|
|
- push({ name: 'IotMaintain', params:{}})
|
|
|
|
|
|
+ push({ name: 'IotMaintain', params: {} })
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+const handleViewNew = (nodeId, bomId) => {
|
|
|
|
+ drawerVisible.value = true
|
|
|
|
+ // showDrawer.value.openDrawer()
|
|
|
|
+ const queryParams = {
|
|
|
|
+ pageNo: 1,
|
|
|
|
+ pageSize: 100,
|
|
|
|
+ bomId: nodeId
|
|
|
|
+ }
|
|
|
|
+ IotMaintainMaterialsApi.getIotMaintainMaterialsPage(queryParams).then((res) => {
|
|
|
|
+ debugger
|
|
|
|
+ currentBomNodeId.value = bomId
|
|
|
|
+ materialList.value = res.list
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
/** 提交表单 */
|
|
/** 提交表单 */
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
await IotMaintainApi.getIotMaintain(id).then((res) => {
|
|
await IotMaintainApi.getIotMaintain(id).then((res) => {
|
|
formData.value = res
|
|
formData.value = res
|
|
- if (res.outFile){
|
|
|
|
- formData.value.outFile = res.outFile.split(",")
|
|
|
|
|
|
+ if (res.outFile) {
|
|
|
|
+ formData.value.outFile = res.outFile.split(',')
|
|
}
|
|
}
|
|
|
|
|
|
- list.value = res.maintainMaterialDOS
|
|
|
|
|
|
+ list.value = res.maintainBomDOS
|
|
|
|
+ list.value.forEach((item) => {
|
|
|
|
+ item.deviceName = res.deviceName
|
|
|
|
+ item.deviceCode = res.deviceCode
|
|
|
|
+ })
|
|
UserApi.getUser(formData.value.maintainPerson).then((res) => {
|
|
UserApi.getUser(formData.value.maintainPerson).then((res) => {
|
|
- formData.value.maintainPerson = res.nickname;
|
|
|
|
|
|
+ formData.value.maintainPerson = res.nickname
|
|
})
|
|
})
|
|
IotMaintainMaterialApi.getMaterialsByDeviceId()
|
|
IotMaintainMaterialApi.getMaterialsByDeviceId()
|
|
})
|
|
})
|