bonus-ui/src/views/EquipmentEntryApply/equipmentInput/add.vue

758 lines
26 KiB
Vue
Raw Normal View History

2025-09-25 19:20:00 +08:00
<template>
<!-- 弹窗内容区域 -->
2025-10-15 10:46:47 +08:00
<div class="app-container" style="height: calc(100vh - 84px); overflow-y: unset">
2025-09-25 19:20:00 +08:00
<div class="page-header">
<div>
2025-10-15 10:46:47 +08:00
<i
class="el-icon-arrow-left goBack-btn"
@click="goBack"
style="border-color: transparent; color: #00a288; background: transparent; padding-left: 0; padding-right: 0"
>返回</i
>
<span class="page-title">{{ pageTitle }}</span>
2025-09-25 19:20:00 +08:00
</div>
<div class="dialog-footer" style="float: right">
<el-button size="medium" @click="goBack">取消</el-button>
<el-button type="primary" size="medium" @click="handleSubmit">确认</el-button>
</div>
</div>
<el-form
label-width="110px"
ref="formRef"
2025-10-15 10:46:47 +08:00
style="padding: 12px; overflow-y: auto; height: calc(100vh - 180px); width: 100%"
2025-09-25 19:20:00 +08:00
label-position="right"
:model="form"
:rules="equipRules"
>
2025-10-15 10:46:47 +08:00
<div style="display: flex; padding-bottom: 5px">
<div style="width: 5px; background-color: #00a288; margin-right: 10px"></div>
2025-09-25 19:20:00 +08:00
基础信息
</div>
<el-row :gutter="24" style="padding-top: 10px">
<el-col :span="6">
<el-form-item label="专业" prop="major">
2025-10-29 18:58:53 +08:00
<el-select v-model="form.major" placeholder="请选择专业" @change="majorChange" style="width: 100%">
2025-10-15 10:46:47 +08:00
<el-option v-for="item in majorList" :key="item.value" :label="item.label" :value="item.value">
2025-09-25 19:20:00 +08:00
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工序" prop="process">
2025-10-15 10:46:47 +08:00
<el-cascader
style="width: 100%"
v-model="form.process"
placeholder="请选择工序"
:options="processList"
@change="processChange"
2025-09-25 19:20:00 +08:00
></el-cascader>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="装备类目" prop="category">
2025-10-15 10:46:47 +08:00
<el-cascader
style="width: 100%"
v-model="form.category"
:options="categoryList"
placeholder="请选择装备类目"
@change="categoryChange"
2025-09-25 19:20:00 +08:00
></el-cascader>
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="装备名称" prop="name">
2025-10-15 10:46:47 +08:00
<el-input autocomplete="off" maxlength="30" placeholder="请输入装备名称" v-model="form.name" clearable />
2025-09-25 19:20:00 +08:00
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="规格型号" prop="specificationModel">
2025-09-25 19:20:00 +08:00
<el-input
autocomplete="off"
maxlength="30"
2025-10-13 19:20:43 +08:00
v-model="form.specificationModel"
2025-09-25 19:20:00 +08:00
placeholder="请输入规格型号"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="资产原值" prop="originalValue">
2025-09-25 19:20:00 +08:00
<el-input
@input="handlePriceInput"
autocomplete="off"
maxlength="20"
2025-10-13 19:20:43 +08:00
v-model="form.originalValue"
2025-09-25 19:20:00 +08:00
placeholder="请输入资产原值"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-14 17:23:57 +08:00
<el-form-item label="生产厂家" prop="manufacturerId">
2025-10-15 10:46:47 +08:00
<el-select v-model="form.manufacturerId" placeholder="请选择生产厂家" clearable style="width: 100%">
<el-option v-for="item in manufacturerList" :key="item.id" :label="item.label" :value="item.id" />
2025-10-13 19:20:43 +08:00
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="生产日期" prop="productionDate">
2025-09-25 19:20:00 +08:00
<el-date-picker
v-model="form.productionDate"
type="date"
2025-10-13 19:20:43 +08:00
placeholder="请选择生产日期"
2025-10-13 09:27:53 +08:00
value-format="yyyy-MM-dd"
2025-09-25 19:20:00 +08:00
style="width: 100%"
2025-10-15 09:05:19 +08:00
:picker-options="{
disabledDate(time) {
return time.getTime() > Date.now()
2025-10-15 10:46:47 +08:00
},
2025-10-15 09:05:19 +08:00
}"
2025-09-25 19:20:00 +08:00
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="下次维保日期" prop="nextMaintenanceDate">
2025-09-25 19:20:00 +08:00
<el-date-picker
2025-10-13 19:20:43 +08:00
v-model="form.nextMaintenanceDate"
2025-09-25 19:20:00 +08:00
placeholder="请选择下次维保日期"
2025-10-13 09:27:53 +08:00
value-format="yyyy-MM-dd"
2025-09-25 19:20:00 +08:00
type="date"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="装备原始编码" prop="originalCode">
2025-10-15 10:46:47 +08:00
<el-input clearable maxlength="20" placeholder="请输入装备原始编码" v-model="form.originalCode" />
2025-09-25 19:20:00 +08:00
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="最大使用年限" prop="maxServiceLifeYears">
2025-10-15 09:05:19 +08:00
<el-input-number
2025-10-13 19:20:43 +08:00
clearable
maxlength="20"
placeholder="请输入最大使用年限"
v-model="form.maxServiceLifeYears"
2025-10-15 09:05:19 +08:00
:min="1"
:max="100"
:precision="0"
:controls="false"
style="width: 100%"
2025-10-13 19:20:43 +08:00
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="管理模式" prop="manageType">
2025-09-25 19:20:00 +08:00
<el-select
2025-10-13 19:20:43 +08:00
v-model="form.manageType"
2025-09-25 19:20:00 +08:00
placeholder="请选择管理方式"
clearable
@change="deviceTypeChange"
style="width: 100%"
>
2025-10-15 10:46:47 +08:00
<el-option label="编码" value="0" />
<el-option label="数量" value="1" />
2025-09-25 19:20:00 +08:00
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="装备数量" prop="count">
2025-10-15 09:05:19 +08:00
<el-input-number
2025-10-13 19:20:43 +08:00
v-model="form.count"
2025-09-25 19:20:00 +08:00
placeholder="请输入装备数量"
2025-10-15 09:05:19 +08:00
:min="1"
:max="100"
:precision="0"
:controls="false"
style="width: 100%"
2025-10-15 10:46:47 +08:00
:disabled="form.manageType == 0"
2025-09-25 19:20:00 +08:00
/>
</el-form-item>
</el-col>
<el-col :span="6">
2025-10-13 19:20:43 +08:00
<el-form-item label="计数单位" prop="unit">
2025-10-29 18:58:53 +08:00
<!-- <el-input v-model="form.unit" placeholder="请输入计数单位" clearable maxlength="11" /> -->
2025-11-12 15:17:33 +08:00
<el-select v-model="form.unit" placeholder="请选择计数单位" clearable style="width: 100%">
2025-10-29 18:58:53 +08:00
<el-option
v-for="dict in dict.type.dev_unit_type"
:key="dict.label"
:label="dict.label"
:value="dict.label"
/>
</el-select>
2025-09-25 19:20:00 +08:00
</el-form-item>
</el-col>
2025-10-14 17:23:57 +08:00
<el-col :span="6">
2025-10-14 18:09:30 +08:00
<el-form-item label="采购日期" prop="purchaseDate">
2025-10-14 17:23:57 +08:00
<el-date-picker
v-model="form.purchaseDate"
2025-10-14 18:09:30 +08:00
placeholder="请选择采购日期"
2025-10-14 17:23:57 +08:00
value-format="yyyy-MM-dd"
type="date"
style="width: 100%"
2025-10-15 09:05:19 +08:00
:picker-options="{
disabledDate(time) {
return time.getTime() > Date.now()
2025-10-15 10:46:47 +08:00
},
2025-10-15 09:05:19 +08:00
}"
2025-10-14 17:23:57 +08:00
>
</el-date-picker>
</el-form-item>
</el-col>
2025-09-25 19:20:00 +08:00
</el-row>
2025-10-15 10:46:47 +08:00
<div style="display: flex; padding-bottom: 10px">
<div style="width: 5px; background-color: #00a288; margin-right: 10px"></div>
2025-09-25 19:20:00 +08:00
特征属性
</div>
<el-row :gutter="24" style="padding-top: 10px">
2025-10-16 19:26:47 +08:00
<!-- propertyVoList -->
<el-col :span="6" v-for="(item, index) in propertyVoList" :key="index">
<el-form-item v-if="item.inputType == 1" :label="item.propertyName">
<el-input autocomplete="off" maxlength="30" v-model="item.propertyValue" clearable />
</el-form-item>
<!-- 单选 -->
<el-form-item v-if="item.inputType == 2" :label="item.propertyName">
<el-select v-model="item.propertyValue" placeholder="请选择" clearable style="width: 100%">
<el-option
v-for="(item, index) in handleData(item.value)"
:key="index"
:label="item.value"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<!-- 多选 -->
<el-form-item v-if="item.inputType == 3" :label="item.propertyName">
<el-select v-model="item.propertyValue" multiple placeholder="请选择" clearable style="width: 100%">
<el-option
v-for="(item, index) in handleData(item.value)"
:key="index"
:label="item.value"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="6">
2025-09-25 19:20:00 +08:00
<el-form-item label="专业特征" prop="specialtyFeature">
2025-10-15 10:46:47 +08:00
<el-input autocomplete="off" maxlength="30" v-model="form.specialtyFeature" clearable />
2025-09-25 19:20:00 +08:00
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工序特征" prop="processFeature">
2025-10-15 10:46:47 +08:00
<el-input autocomplete="off" maxlength="30" v-model="form.processFeature" clearable />
2025-09-25 19:20:00 +08:00
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="类目特征" prop="categoryFeature">
2025-10-15 10:46:47 +08:00
<el-input autocomplete="off" maxlength="30" v-model="form.categoryFeature" clearable />
2025-09-25 19:20:00 +08:00
</el-form-item>
2025-10-16 19:26:47 +08:00
</el-col> -->
2025-09-25 19:20:00 +08:00
</el-row>
2025-10-15 10:46:47 +08:00
<div style="display: flex; padding-bottom: 10px">
<div style="width: 5px; background-color: #00a288; margin-right: 10px"></div>
2025-09-25 19:20:00 +08:00
装备图片
</div>
<el-row :gutter="24" style="padding-top: 10px">
<el-col>
<el-form-item label="展示图" prop="mainFileList">
<ImageUpload
v-model="form.mainFileList"
:value="form.mainFileList"
:limit="6"
@change="handleImageChange"
/>
</el-form-item>
</el-col>
</el-row>
2025-10-15 10:46:47 +08:00
<div style="display: flex; padding-bottom: 10px">
<div style="width: 5px; background-color: #00a288; margin-right: 10px"></div>
2025-09-25 19:20:00 +08:00
相关证书
</div>
<el-row :gutter="24" style="padding-top: 10px">
<el-col>
<el-form-item label="合格证" prop="certificateList">
<FileUpload
v-model="form.certificateList"
:value="form.certificateList"
:limit="3"
:fileSize="10"
2025-10-15 10:46:47 +08:00
:fileType="['doc', 'docx', 'ppt', 'pdf']"
2025-09-25 19:20:00 +08:00
@change="handleCertificateChange"
/>
</el-form-item>
<el-form-item label="检测证书" prop="inspectionList">
<FileUpload
v-model="form.inspectionList"
:value="form.inspectionList"
:limit="3"
:fileSize="10"
2025-10-15 10:46:47 +08:00
:fileType="['doc', 'docx', 'ppt', 'pdf']"
2025-09-25 19:20:00 +08:00
@change="handleInspectionChange"
/>
</el-form-item>
2025-10-15 10:46:47 +08:00
2025-10-13 19:20:43 +08:00
<el-form-item label="采购发票" prop="purchaseInvoices">
<FileUpload
v-model="form.purchaseInvoices"
:value="form.purchaseInvoices"
:limit="3"
:fileSize="10"
:fileType="['pdf', 'jpg', 'png', 'jpeg']"
@change="handlePurchaseInvoicesChange"
/>
</el-form-item>
2025-09-25 19:20:00 +08:00
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import {
2025-10-13 19:20:43 +08:00
addInterDevice,
2025-09-25 19:20:00 +08:00
getEquipmentAddIdApi,
firstLevel,
secondAndThirdLevel,
2025-10-15 10:46:47 +08:00
fourthToSixthLevel,
getDeviceApi,
equipmentEditApiNew,
2025-10-16 19:26:47 +08:00
getEquipmentPropertyTypeApi,
2025-09-25 19:20:00 +08:00
} from '@/api/EquipmentEntryApply'
2025-10-13 19:20:43 +08:00
import { getManufacturerSelectApi } from '@/api/EquipmentLedger/index.js'
2025-09-25 19:20:00 +08:00
import ImageUpload from '@/components/ImageUpload'
import FileUpload from '@/components/ImageUpload'
export default {
name: 'EquipmentEntryEditDialog', // 明确组件名称
emits: ['update:isVisible', 'submit', 'getOrderId'], // 声明事件
2025-10-29 18:58:53 +08:00
dicts: ['dev_unit_type'],
2025-09-25 19:20:00 +08:00
data() {
return {
2025-10-15 10:46:47 +08:00
isSubmit: false,
query: {},
pageTitle: '新增装备',
2025-09-25 19:20:00 +08:00
// 下拉列表数据
majorList: [],
processList: [],
categoryList: [],
2025-10-13 19:20:43 +08:00
manufacturerList: [],
2025-09-25 19:20:00 +08:00
form: {
major: '', // 专业
2025-10-15 10:46:47 +08:00
process: [], // 工序
category: [], // 类目
2025-10-13 19:20:43 +08:00
name: '', // 装备名称
specificationModel: '', // 规格型号
originalValue: '', // 资产原值
2025-09-25 19:20:00 +08:00
productionDate: '', // 出厂日期
2025-10-14 17:23:57 +08:00
manufacturerId: '', // 生产厂家
2025-10-13 19:20:43 +08:00
originalCode: '', // 装备原始编码
nextMaintenanceDate: '', // 下次维保日期
maxServiceLifeYears: '', // 装备寿命
manageType: '', // 管理模式
count: 1, // 装备数量
unit: '', // 计数单位
2025-10-14 17:23:57 +08:00
purchaseDate: '',
2025-09-25 19:20:00 +08:00
specialtyFeature: '', // 专业特征
processFeature: '', // 工序特征
categoryFeature: '', // 类目特征
2025-10-13 19:20:43 +08:00
// deviceTypeList: [], // 装备类型列表
2025-09-25 19:20:00 +08:00
mainFileList: [], // 展示图
certificateList: [], // 合格证
2025-10-15 10:46:47 +08:00
inspectionList: [], // 检测证书
2025-09-25 19:20:00 +08:00
},
// 表单校验规则(所有字段均为必填)
equipRules: {
2025-10-15 10:46:47 +08:00
major: [{ required: true, message: '请选择专业', trigger: 'change' }],
process: [{ required: true, message: '请选择工序', trigger: 'change' }],
category: [{ required: true, message: '请选择装备类目', trigger: 'change' }],
name: [{ required: true, message: '请输入装备名称', trigger: 'blur' }],
specificationModel: [{ required: true, message: '请输入规格型号', trigger: 'blur' }],
originalValue: [{ required: true, message: '请输入资产原值', trigger: 'blur' }],
productionDate: [{ required: true, message: '请选择出厂日期', trigger: 'change' }],
manufacturerId: [{ required: true, message: '请输入生产厂家', trigger: 'blur' }],
originalCode: [{ required: true, message: '请输入装备原始编码', trigger: 'blur' }],
nextMaintenanceDate: [{ required: true, message: '请选择下次维保日期', trigger: 'change' }],
maxServiceLifeYears: [{ required: true, message: '请输入装备寿命', trigger: 'blur' }],
manageType: [{ required: true, message: '请选择管理方式', trigger: 'change' }],
count: [{ required: true, message: '请输入装备数量', trigger: 'blur' }],
unit: [{ required: true, message: '请输入计数单位', trigger: 'blur' }],
purchaseDate: [{ required: true, message: '请选择采购日期', trigger: 'change' }],
2025-11-24 18:11:54 +08:00
certificateList: [{ required: true, message: '请上传合格证', trigger: 'change' }],
inspectionList: [{ required: true, message: '请上传检测证书', trigger: 'change' }],
mainFileList: [{ required: true, message: '请上传图片', trigger: 'change' }]
2025-10-15 10:46:47 +08:00
},
2025-10-16 19:26:47 +08:00
propertyVoList: [], // 特征属性集合
2025-09-25 19:20:00 +08:00
}
},
created() {
this.firstLevel()
2025-10-13 19:20:43 +08:00
this.getManufacturerSelectList()
2025-10-15 10:46:47 +08:00
this.query = this.$route.query
if (this.query && this.query.maId) {
this.pageTitle = '编辑装备'
this.orderId = this.query.orderId
this.getInfo()
}
2025-09-25 19:20:00 +08:00
},
methods: {
2025-10-15 10:46:47 +08:00
// 获取详情
async getInfo() {
try {
const res = await getDeviceApi(this.query.maId)
console.log('🚀 ~ getInfo ~ res:', res)
this.form = res.data
this.form.mainFileList = res.data.appearanceImages
? res.data.appearanceImages.map((item) => item.fileUrl).join(',')
: []
this.form.certificateList = res.data.certificates
? res.data.certificates.map((item) => item.fileUrl).join(',')
: []
this.form.inspectionList = res.data.inspectionReports
? res.data.inspectionReports.map((item) => item.fileUrl).join(',')
: []
this.form.purchaseInvoices = res.data.purchaseInvoices
? res.data.purchaseInvoices.map((item) => item.fileUrl).join(',')
: []
this.form.process = [String(res.data.mainProcessId), String(res.data.subProcessId)].filter(Boolean)
console.log('🚀 ~ getInfo ~ this.form.process:', this.form.process)
this.form.category = [
String(res.data.mainCategoryId),
String(res.data.subCategoryId),
String(res.data.branchId),
].filter(Boolean)
2025-10-16 19:26:47 +08:00
this.propertyVoList = res.data.propertyVoList || []
console.log('🚀 ~ getInfo ~ this.propertyVoList:', this.propertyVoList)
if (this.propertyVoList.length > 0) {
this.propertyVoList.forEach((item) => {
if (item.inputType == 3) {
item.propertyValue = item.propertyValue.split(',')
}
})
}
2025-10-15 10:46:47 +08:00
const res2 = await secondAndThirdLevel({ firstLevelId: this.form.majorId })
this.processList = this.convertToSubTree(res2.data)
const res3 = await fourthToSixthLevel({ thirdLevelId: this.form.subProcessId })
this.categoryList = this.convertToSubTree(res3.data)
} catch (error) {
console.log('🚀 ~ getInfo ~ error:', error)
}
},
2025-10-13 19:20:43 +08:00
// 获取厂家
getManufacturerSelectList() {
getManufacturerSelectApi().then((res) => {
console.log('🚀 ~ getManufacturerSelectList ~ res:', res)
if (res.code === 200) {
this.manufacturerList = res.data
}
})
},
2025-09-25 19:20:00 +08:00
/**
* 获取一级类型
*/
firstLevel() {
2025-10-15 10:46:47 +08:00
firstLevel().then((res) => {
2025-09-25 19:20:00 +08:00
if (res.code === 200) {
this.majorList = res.data
}
})
},
majorChange(item) {
if (!item) {
this.processList = []
2025-10-15 10:46:47 +08:00
this.form.process = []
2025-09-25 19:20:00 +08:00
} else {
2025-10-15 10:46:47 +08:00
secondAndThirdLevel({ firstLevelId: item }).then((res) => {
2025-09-25 19:20:00 +08:00
if (res.code === 200) {
this.processList = this.convertToSubTree(res.data)
}
})
}
},
processChange(item) {
2025-10-15 10:46:47 +08:00
console.log('🚀 ~ processChange ~ item:', item)
2025-09-25 19:20:00 +08:00
if (item.length === 0) {
this.categoryList = []
2025-10-15 10:46:47 +08:00
this.form.category = []
2025-09-25 19:20:00 +08:00
} else {
2025-10-15 10:46:47 +08:00
fourthToSixthLevel({ thirdLevelId: item[item.length - 1] }).then((res) => {
2025-09-25 19:20:00 +08:00
if (res.code === 200) {
this.categoryList = this.convertToSubTree(res.data)
}
})
}
},
2025-10-16 19:26:47 +08:00
categoryChange(item) {
console.log('🚀 ~ processChange ~ item:', item)
this.propertyVoList = []
this.getPropertyVoList(item[item.length - 1])
},
2025-09-25 19:20:00 +08:00
// 返回上一页
goBack() {
2025-10-15 10:46:47 +08:00
this.$router.go(-1)
// this.$router.push({ path: '/equipment/equipment-input/index' })
2025-09-25 19:20:00 +08:00
},
deviceTypeChange(val) {
if (val === 0) {
2025-10-15 09:05:19 +08:00
this.form.count = 1
2025-09-25 19:20:00 +08:00
}
},
// 价格输入处理
handlePriceInput(v) {
2025-10-13 19:20:43 +08:00
this.form.originalValue = v.replace(/[^\d.]/g, '')
2025-09-25 19:20:00 +08:00
},
// 处理图片上传变化
handleImageChange(files) {
this.form.mainFileList = files
this.$refs.formRef.validateField('mainFileList')
},
// 处理合格证上传变化
handleCertificateChange(files) {
this.form.certificateList = files
this.$refs.formRef.validateField('certificateList')
},
// 处理检测证书上传变化
handleInspectionChange(files) {
this.form.inspectionList = files
this.$refs.formRef.validateField('inspectionList')
},
2025-10-13 19:20:43 +08:00
// 处理采购发票上传变化
handlePurchaseInvoicesChange(files) {
this.form.purchaseInvoices = files
this.$refs.formRef.validateField('purchaseInvoices')
},
2025-09-25 19:20:00 +08:00
/**
* 处理表单提交
*/
async handleSubmit() {
2025-10-16 19:26:47 +08:00
console.log('🚀 ~ handleSubmit ~ this.form:', this.form, this.propertyVoList)
2025-10-15 10:46:47 +08:00
this.$refs['formRef'].validate(async (valid) => {
if (valid) {
if (this.isSubmit) return
this.isSubmit = true
const loading = this.$loading()
try {
if (!this.query.maId) {
const result = await getEquipmentAddIdApi()
this.orderId = result.data.id
this.form.orderId = this.orderId
}
2025-09-25 19:20:00 +08:00
// 获取数组最后一个元素最末级分类ID
2025-10-13 09:27:53 +08:00
// this.form.typeId = this.form.deviceTypeList[this.form.deviceTypeList.length - 1]
// 获取类目的最后一个值
this.form.typeId = this.form.category[this.form.category.length - 1]
2025-10-14 17:23:57 +08:00
let appearanceImages = [] // 装备图片
let certificates = [] // 合格证
let inspectionReports = [] // 验收报告
let purchaseInvoices = [] // 采购发票
2025-10-13 19:20:43 +08:00
if (this.form.mainFileList) {
const arr = this.form.mainFileList.split(',')
console.log('🚀 ~ 提交 ~ arr:', arr)
2025-10-15 10:46:47 +08:00
appearanceImages = arr.map((item) => {
2025-10-13 19:20:43 +08:00
const parts = item.split('/')
return {
fileName: parts[parts.length - 1],
2025-10-15 10:46:47 +08:00
fileUrl: item,
2025-10-13 19:20:43 +08:00
}
})
2025-10-14 17:23:57 +08:00
console.log('🚀 ~ handleSubmit ~ appearanceImages:', appearanceImages)
2025-10-13 19:20:43 +08:00
}
if (this.form.certificateList) {
const arr = this.form.certificateList.split(',')
2025-10-15 10:46:47 +08:00
certificates = arr.map((item) => {
2025-10-13 19:20:43 +08:00
const parts = item.split('/')
return {
fileName: parts[parts.length - 1],
2025-10-15 10:46:47 +08:00
fileUrl: item,
2025-10-13 19:20:43 +08:00
}
})
2025-10-14 17:23:57 +08:00
console.log('🚀 ~ handleSubmit ~ certificates:', certificates)
2025-10-15 09:05:19 +08:00
} else {
// 提示
this.$message.error('请上传合格证')
return
2025-10-13 19:20:43 +08:00
}
if (this.form.inspectionList) {
const arr = this.form.inspectionList.split(',')
2025-10-15 10:46:47 +08:00
inspectionReports = arr.map((item) => {
2025-10-13 19:20:43 +08:00
const parts = item.split('/')
return {
fileName: parts[parts.length - 1],
2025-10-15 10:46:47 +08:00
fileUrl: item,
2025-10-13 19:20:43 +08:00
}
})
2025-10-14 17:23:57 +08:00
console.log('🚀 ~ handleSubmit ~ inspectionReports:', inspectionReports)
2025-10-15 09:05:19 +08:00
} else {
// 提示
this.$message.error('请上传检测证书')
return
2025-10-13 19:20:43 +08:00
}
if (this.form.purchaseInvoices) {
const arr = this.form.purchaseInvoices.split(',')
2025-10-15 10:46:47 +08:00
purchaseInvoices = arr.map((item) => {
2025-10-13 19:20:43 +08:00
const parts = item.split('/')
return {
fileName: parts[parts.length - 1],
2025-10-15 10:46:47 +08:00
fileUrl: item,
2025-10-13 19:20:43 +08:00
}
})
2025-10-14 17:23:57 +08:00
console.log('🚀 ~ handleSubmit ~ purchaseInvoices:', purchaseInvoices)
2025-10-13 19:20:43 +08:00
}
2025-10-16 19:26:47 +08:00
// 判断特征项是否填写 propertyVoList 每个propertyValue 都要有值
if (this.propertyVoList && this.propertyVoList.length > 0) {
const unfilledIndex = this.propertyVoList.findIndex(
(item) => !item.propertyValue || item.propertyValue === '',
)
if (unfilledIndex !== -1) {
this.$message.warning(`请填写第 ${unfilledIndex + 1} 个特征项`)
return
}
}
this.propertyVoList.forEach((item) => {
console.log('item.item.propertyValue', item.propertyValue)
if (item.inputType == 3 && Array.isArray(item.propertyValue)) {
item.propertyValue = item.propertyValue.join(',')
}
})
2025-10-13 09:27:53 +08:00
2025-10-15 10:46:47 +08:00
let res = null
2025-10-16 19:26:47 +08:00
const params = {
...this.form,
appearanceImages,
certificates,
inspectionReports,
purchaseInvoices,
propertyVoList: this.propertyVoList,
}
2025-10-15 10:46:47 +08:00
if (this.query && this.query.maId) {
params.maId = this.query.maId
res = await equipmentEditApiNew(params)
} else {
res = await addInterDevice(params)
}
2025-09-25 19:20:00 +08:00
if (res.code === 200) {
2025-10-13 21:54:00 +08:00
// this.goBack()
this.$router.push({
name: 'equipmentInput',
2025-10-14 17:23:57 +08:00
query: {
2025-10-13 21:54:00 +08:00
orderId: this.orderId,
isAddVisible: false,
2025-10-15 10:46:47 +08:00
isApprovalVisible: false,
},
2025-10-13 21:54:00 +08:00
})
2025-09-25 19:20:00 +08:00
}
2025-10-15 10:46:47 +08:00
} catch (error) {
console.log('🚀 ~ handleSubmit ~ error:', error)
} finally {
this.isSubmit = false
loading.close()
2025-09-25 19:20:00 +08:00
}
}
2025-10-15 10:46:47 +08:00
})
2025-09-25 19:20:00 +08:00
},
/**
* 转换类型数据为树形结构适用于级联选择器
*/
convertToSubTree(list) {
const map = {}
const tree = []
// 构建节点映射
2025-10-15 10:46:47 +08:00
list.forEach((item) => {
2025-09-25 19:20:00 +08:00
map[item.value] = {
value: item.value.toString(),
2025-10-15 10:46:47 +08:00
label: item.label,
2025-09-25 19:20:00 +08:00
}
})
// 构建树形关系
2025-10-15 10:46:47 +08:00
list.forEach((item) => {
2025-09-25 19:20:00 +08:00
const current = map[item.value]
const parent = map[item.parentId]
if (parent) {
if (!parent.children) {
parent.children = []
}
parent.children.push(current)
} else {
tree.push(current)
}
})
return tree
2025-10-15 10:46:47 +08:00
},
2025-10-16 19:26:47 +08:00
// 获取特征值
async getPropertyVoList(typeId) {
try {
const res = await getEquipmentPropertyTypeApi(typeId)
console.log('特征值-->:', res)
this.propertyVoList = res.data || []
} catch (error) {
console.log('获取特征值失败:', error)
}
},
// 处理数据
handleData(data) {
console.log('处理数据:', data)
if (!data) return []
return data.split(',').map((item) => {
return {
label: item,
value: item,
}
})
},
2025-10-15 10:46:47 +08:00
},
2025-09-25 19:20:00 +08:00
}
</script>
<style lang="scss" scoped>
.page-header {
display: flex;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
font-size: 18px;
border-bottom: 1px solid #e6e6e6;
justify-content: space-between;
.page-title {
font-size: 18px;
font-weight: 600;
margin-left: 15px;
color: #303133;
}
}
.dialog-content {
padding: 10px 0;
min-height: 200px; // 确保有足够高度
}
.goBack-btn:hover {
cursor: pointer;
color: #33b5a0;
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 10px; // 按钮间距
}
</style>