装备台账
This commit is contained in:
parent
5d9703e026
commit
e7f903991f
|
|
@ -7,18 +7,66 @@
|
|||
<!-- 只有在未折叠状态显示标题 -->
|
||||
<span class="card-title">装备分类</span>
|
||||
</div>
|
||||
|
||||
|
||||
<el-form
|
||||
ref="queryFormLeft"
|
||||
v-show="showSearch"
|
||||
:model="queryParams"
|
||||
:rules="queryRules"
|
||||
style="margin-top: 20px; padding: 0 15px;"
|
||||
>
|
||||
<el-form-item prop="name" style="margin-bottom: 0;">
|
||||
<el-input
|
||||
v-model="treeSearchKey"
|
||||
placeholder="搜索"
|
||||
@keyup.enter.native="getDeviceListByTreeSearch"
|
||||
class="tree-search-input"
|
||||
|
||||
|
||||
>
|
||||
<template #suffix>
|
||||
<div class="tree-search-buttons">
|
||||
<el-button
|
||||
icon="el-icon-search"
|
||||
size="mini"
|
||||
@click="getDeviceListByTreeSearch"
|
||||
title="查询"
|
||||
class="search-btn-embedded"
|
||||
/>
|
||||
<el-button
|
||||
icon="el-icon-refresh"
|
||||
size="mini"
|
||||
@click="resetTreeSearch"
|
||||
title="重置"
|
||||
class="search-btn-embedded"
|
||||
style="margin-left: 0;"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- 树组件,折叠时隐藏 -->
|
||||
<el-tree
|
||||
v-if="!collapsed"
|
||||
v-show="!collapsed"
|
||||
:data="treeData"
|
||||
:props="defaultProps"
|
||||
:indent="6"
|
||||
@node-click="handleNodeClick"
|
||||
default-expand-all
|
||||
:default-expanded-keys="defaultExpandedKeys"
|
||||
class="tree-container"
|
||||
:loading="treeLoading"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="position: relative; width: 20px; height: calc(100vh - 130px); margin-left: 5px">
|
||||
<!-- 右侧折叠/展开按钮 -->
|
||||
<el-button
|
||||
|
|
@ -79,7 +127,7 @@
|
|||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option v-for="item in provinceList" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-option v-for="item in provinceList" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -103,12 +151,12 @@
|
|||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="类型分支" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入类型分支" clearable />
|
||||
<el-input v-model="queryParams.name" placeholder="请输入类型分支" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="规格型号" prop="specificationModel">
|
||||
<el-input v-model="queryParams.specificationModel" placeholder="请输入规格型号" clearable />
|
||||
<el-input v-model="queryParams.specificationModel" placeholder="请输入规格型号" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -124,7 +172,7 @@
|
|||
@change="majorChange"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option v-for="item in majorList" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-option v-for="item in majorList" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -152,7 +200,7 @@
|
|||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="装备编码" prop="code">
|
||||
<el-input v-model="queryParams.code" placeholder="请输入装备编码" clearable />
|
||||
<el-input v-model="queryParams.code" placeholder="请输入装备编码" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
|
|
@ -208,12 +256,12 @@
|
|||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="原始编码" prop="originalCode">
|
||||
<el-input v-model="queryParams.originalCode" placeholder="请输入装备原始编码" clearable />
|
||||
<el-input v-model="queryParams.originalCode" placeholder="请输入装备原始编码" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="使用年限" prop="serviceLife">
|
||||
<el-input v-model="queryParams.serviceLife" placeholder="请输入使用年限" clearable />
|
||||
<el-input v-model="queryParams.serviceLife" placeholder="请输入使用年限" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
|
|
@ -235,12 +283,12 @@
|
|||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="特征项" prop="featureItem">
|
||||
<el-input v-model="queryParams.featureItem" placeholder="请输入特征项" clearable />
|
||||
<el-input v-model="queryParams.featureItem" placeholder="请输入特征项" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="特征值" prop="featureValue">
|
||||
<el-input v-model="queryParams.featureValue" placeholder="请输入特征值" clearable />
|
||||
<el-input v-model="queryParams.featureValue" placeholder="请输入特征值" clearable/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -254,6 +302,7 @@
|
|||
<el-button
|
||||
icon="el-icon-refresh"
|
||||
style="float: right; margin-left: 20px"
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click="resetQuery"
|
||||
>
|
||||
|
|
@ -306,15 +355,6 @@
|
|||
>
|
||||
装备退役
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-document-checked"
|
||||
@click="onHandleReturn"
|
||||
class="operation-btn"
|
||||
>
|
||||
装备退库
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
|
|
@ -354,10 +394,9 @@
|
|||
:key="Date.now()"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="tableLoading"
|
||||
border stripe
|
||||
>
|
||||
<el-table-column align="center" show-overflow-tooltip type="selection" width="50" />
|
||||
<el-table-column align="center" show-overflow-tooltip type="index" label="序号" width="50" />
|
||||
<el-table-column align="center" show-overflow-tooltip type="selection" width="50"/>
|
||||
<el-table-column align="center" show-overflow-tooltip type="index" label="序号" width="50"/>
|
||||
<el-table-column
|
||||
v-for="(item, index) in columns"
|
||||
v-if="item.visible"
|
||||
|
|
@ -451,42 +490,42 @@
|
|||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司名称" prop="companyName">
|
||||
<el-input v-model="formData.companyName" disabled />
|
||||
<el-input v-model="formData.companyName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="施工主工序" prop="mainGx">
|
||||
<el-input v-model="formData.mainGx" disabled />
|
||||
<el-input v-model="formData.mainGx" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="施工子工序" prop="childGx">
|
||||
<el-input v-model="formData.childGx" disabled />
|
||||
<el-input v-model="formData.childGx" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备大类" prop="devCategory">
|
||||
<el-input v-model="formData.devCategory" disabled />
|
||||
<el-input v-model="formData.devCategory" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备小类" prop="devSubcategory">
|
||||
<el-input v-model="formData.devSubcategory" disabled />
|
||||
<el-input v-model="formData.devSubcategory" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="类型分支" prop="name">
|
||||
<el-input v-model="formData.name" disabled />
|
||||
<el-input v-model="formData.name" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格型号" prop="devModel">
|
||||
<el-input v-model="formData.devModel" disabled />
|
||||
<el-input v-model="formData.devModel" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备编号" prop="code">
|
||||
<el-input v-model="formData.code" disabled />
|
||||
<el-input v-model="formData.code" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -510,57 +549,57 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="使用到期时间" prop="expireTime">
|
||||
<el-input v-model="formData.expireTime" disabled />
|
||||
<el-input v-model="formData.expireTime" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="计数单位" prop="unitName">
|
||||
<el-input v-model="formData.unitName" disabled />
|
||||
<el-input v-model="formData.unitName" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产权单位" prop="propertyCompany">
|
||||
<el-input v-model="formData.propertyCompany" disabled />
|
||||
<el-input v-model="formData.propertyCompany" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="资产原值" prop="buyPrice">
|
||||
<el-input v-model="formData.buyPrice" disabled />
|
||||
<el-input v-model="formData.buyPrice" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生产日期" prop="productionDate">
|
||||
<el-input v-model="formData.productionDate" disabled />
|
||||
<el-input v-model="formData.productionDate" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="使用年限" prop="workingHours">
|
||||
<el-input v-model="formData.workingHours" disabled />
|
||||
<el-input v-model="formData.workingHours" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所在项目" prop="onProject">
|
||||
<el-input v-model="formData.onProject" disabled />
|
||||
<el-input v-model="formData.onProject" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="person">
|
||||
<el-input v-model="formData.person" disabled />
|
||||
<el-input v-model="formData.person" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式" prop="personPhone">
|
||||
<el-input v-model="formData.personPhone" disabled />
|
||||
<el-input v-model="formData.personPhone" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="下次维保日期" prop="nextCheckTime">
|
||||
<el-input v-model="formData.nextCheckTime" disabled />
|
||||
<el-input v-model="formData.nextCheckTime" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生产厂商" prop="brand">
|
||||
<el-input v-model="formData.brand" disabled />
|
||||
<el-input v-model="formData.brand" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -583,42 +622,42 @@
|
|||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司名称" prop="companyName">
|
||||
<el-input v-model="formData.companyName" />
|
||||
<el-input v-model="formData.companyName"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="施工主工序" prop="mainGx">
|
||||
<el-input v-model="formData.mainGx" />
|
||||
<el-input v-model="formData.mainGx"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="施工子工序" prop="childGx">
|
||||
<el-input v-model="formData.childGx" />
|
||||
<el-input v-model="formData.childGx"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备大类" prop="devCategory">
|
||||
<el-input v-model="formData.devCategory" />
|
||||
<el-input v-model="formData.devCategory"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备小类" prop="devSubcategory">
|
||||
<el-input v-model="formData.devSubcategory" />
|
||||
<el-input v-model="formData.devSubcategory"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="类型分支" prop="name">
|
||||
<el-input v-model="formData.name" />
|
||||
<el-input v-model="formData.name"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格型号" prop="devModel">
|
||||
<el-input v-model="formData.devModel" />
|
||||
<el-input v-model="formData.devModel"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装备编号" prop="code">
|
||||
<el-input v-model="formData.code" disabled />
|
||||
<el-input v-model="formData.code" disabled/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -653,17 +692,17 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="计数单位" prop="unitName">
|
||||
<el-input v-model="formData.unitName" />
|
||||
<el-input v-model="formData.unitName"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产权单位" prop="propertyCompany">
|
||||
<el-input v-model="formData.propertyCompany" />
|
||||
<el-input v-model="formData.propertyCompany"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="资产原值" prop="buyPrice">
|
||||
<el-input v-model="formData.buyPrice" type="number" />
|
||||
<el-input v-model="formData.buyPrice" type="number"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -679,22 +718,22 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="使用年限" prop="workingHours">
|
||||
<el-input v-model="formData.workingHours" type="number" />
|
||||
<el-input v-model="formData.workingHours" type="number"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所在项目" prop="onProject">
|
||||
<el-input v-model="formData.onProject" />
|
||||
<el-input v-model="formData.onProject"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="person">
|
||||
<el-input v-model="formData.person" />
|
||||
<el-input v-model="formData.person"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式" prop="personPhone">
|
||||
<el-input v-model="formData.personPhone" />
|
||||
<el-input v-model="formData.personPhone"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -710,10 +749,10 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生产厂商" prop="brand">
|
||||
<el-input v-model="formData.brand" />
|
||||
<el-input v-model="formData.brand"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12"> </el-col>
|
||||
<el-col :span="12"></el-col>
|
||||
|
||||
<!-- 添加特征项按钮 -->
|
||||
<el-col :span="24" style="text-align: center; margin-top: 10px">
|
||||
|
|
@ -737,7 +776,7 @@
|
|||
<!-- 弹框 -->
|
||||
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
|
||||
<el-table :data="dialogList" fit highlight-current-row style="width: 100%" :max-height="500">
|
||||
<el-table-column type="index" width="55" label="序号" align="center" />
|
||||
<el-table-column type="index" width="55" label="序号" align="center"/>
|
||||
<el-table-column label="附件名称" prop="fileName" align="center">
|
||||
<!-- 插槽 -->
|
||||
<template v-slot="{ row }">
|
||||
|
|
@ -764,14 +803,18 @@ import {
|
|||
getDeviceDetailAPI,
|
||||
getManufacturerSelectApi
|
||||
} from '@/api/EquipmentLedger/index.js'
|
||||
import { firstLevel, secondAndThirdLevel } from '@/api/EquipmentEntryApply'
|
||||
import { getMaxFeatureAPI, getProvinceListAPI } from '@/api/EquipmentLedger/equ-out.js'
|
||||
import { deptTreeSelect } from '@/api/system/user'
|
||||
import {firstLevel, secondAndThirdLevel} from '@/api/EquipmentEntryApply'
|
||||
import {getMaxFeatureAPI, getProvinceListAPI} from '@/api/EquipmentLedger/equ-out.js'
|
||||
import {deptTreeSelect} from '@/api/system/user'
|
||||
|
||||
export default {
|
||||
name: 'EquipmentLedger',
|
||||
data() {
|
||||
return {
|
||||
treeSearchKey: '', //用于存储左侧树搜索框内容
|
||||
|
||||
defaultExpandedKeys: [], //用于存储需要默认展开的节点id
|
||||
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
tableHeight: 510,
|
||||
|
|
@ -813,51 +856,51 @@ export default {
|
|||
serviceLifeList: [], // 使用年限
|
||||
manufacturerList: [], // 生产厂家
|
||||
columns: [
|
||||
{ key: 0, label: `所属省份`, prop: 'province', visible: true },
|
||||
{ key: 1, label: `产权单位`, prop: 'propertyUnit', visible: true },
|
||||
{ key: 2, label: `专业`, prop: 'major', visible: true },
|
||||
{ key: 3, label: `工序`, prop: 'process', visible: true },
|
||||
{ key: 4, label: `装备类目`, prop: 'devType', visible: true },
|
||||
{ key: 5, label: `类型分支`, prop: 'name', visible: true },
|
||||
{ key: 6, label: `规格型号`, prop: 'specificationModel', visible: true },
|
||||
{ key: 7, label: `装备编码`, prop: 'code', visible: true },
|
||||
{ key: 8, label: `装备状态`, prop: 'status', visible: true },
|
||||
{ key: 44, label: `上下架状态`, prop: 'upDownStatus', visible: true },
|
||||
{ key: 9, label: `使用年限`, prop: 'serviceLife', visible: true },
|
||||
{ key: 10, label: `使用项目`, prop: 'usingProject', visible: true },
|
||||
{ key: 11, label: `使用到期时间`, prop: 'expirationTime', visible: true },
|
||||
{ key: 12, label: `使用次数`, prop: 'usageCount', visible: true },
|
||||
{ key: 13, label: `维修次数`, prop: 'repairCount', visible: true },
|
||||
{ key: 14, label: `装备原始编码`, prop: 'originalCode', visible: true },
|
||||
{ key: 15, label: `计量单位`, prop: 'unit', visible: true },
|
||||
{ key: 16, label: `生产厂家`, prop: 'manufacturer', visible: true },
|
||||
{ key: 17, label: `出厂日期`, prop: 'productionDate', visible: true },
|
||||
{ key: 18, label: `采购日期`, prop: 'purchaseDate', visible: true },
|
||||
{ key: 19, label: `资产原值(元)`, prop: 'originalValue', visible: true },
|
||||
{ key: 20, label: `最大使用年限(年)`, prop: 'maxServiceLifeYears', visible: true },
|
||||
{ key: 21, label: `下次维保日期`, prop: 'nextMaintenanceDate', visible: true },
|
||||
{ key: 22, label: `装备外观`, prop: 'appearanceImages', visible: true },
|
||||
{ key: 23, label: `合格证`, prop: 'certificates', visible: true },
|
||||
{ key: 24, label: `定期检验报告`, prop: 'inspectionReports', visible: true },
|
||||
{ key: 25, label: `采购发票`, prop: 'purchaseInvoices', visible: true },
|
||||
{ key: 26, label: `特征项1`, prop: 'featureItem1', visible: true },
|
||||
{ key: 27, label: `特征值1`, prop: 'featureValue1', visible: true },
|
||||
{ key: 28, label: `特征项2`, prop: 'featureItem2', visible: true },
|
||||
{ key: 29, label: `特征值2`, prop: 'featureValue2', visible: true },
|
||||
{ key: 30, label: `特征项3`, prop: 'featureItem3', visible: true },
|
||||
{ key: 31, label: `特征值3`, prop: 'featureValue3', visible: true },
|
||||
{ key: 32, label: `特征项4`, prop: 'featureItem4', visible: true },
|
||||
{ key: 33, label: `特征值4`, prop: 'featureValue4', visible: true },
|
||||
{ key: 34, label: `特征项5`, prop: 'featureItem5', visible: true },
|
||||
{ key: 35, label: `特征值5`, prop: 'featureValue5', visible: true },
|
||||
{ key: 36, label: `特征项6`, prop: 'featureItem6', visible: true },
|
||||
{ key: 37, label: `特征值6`, prop: 'featureValue6', visible: true },
|
||||
{ key: 38, label: `特征项7`, prop: 'featureItem7', visible: true },
|
||||
{ key: 39, label: `特征值7`, prop: 'featureValue7', visible: true },
|
||||
{ key: 40, label: `特征项8`, prop: 'featureItem8', visible: true },
|
||||
{ key: 41, label: `特征值8`, prop: 'featureValue8', visible: true },
|
||||
{ key: 42, label: `特征项9`, prop: 'featureItem9', visible: true },
|
||||
{ key: 43, label: `特征值9`, prop: 'featureValue9', visible: true },
|
||||
{key: 0, label: `所属省份`, prop: 'province', visible: true},
|
||||
{key: 1, label: `产权单位`, prop: 'propertyUnit', visible: true},
|
||||
{key: 2, label: `专业`, prop: 'major', visible: true},
|
||||
{key: 3, label: `工序`, prop: 'process', visible: true},
|
||||
{key: 4, label: `装备类目`, prop: 'devType', visible: true},
|
||||
{key: 5, label: `类型分支`, prop: 'name', visible: true},
|
||||
{key: 6, label: `规格型号`, prop: 'specificationModel', visible: true},
|
||||
{key: 7, label: `装备编码`, prop: 'code', visible: true},
|
||||
{key: 8, label: `装备状态`, prop: 'status', visible: true},
|
||||
{key: 44, label: `上下架状态`, prop: 'upDownStatus', visible: true},
|
||||
{key: 9, label: `使用年限`, prop: 'serviceLife', visible: true},
|
||||
{key: 10, label: `使用项目`, prop: 'usingProject', visible: true},
|
||||
{key: 11, label: `使用到期时间`, prop: 'expirationTime', visible: true},
|
||||
{key: 12, label: `使用次数`, prop: 'usageCount', visible: true},
|
||||
{key: 13, label: `维修次数`, prop: 'repairCount', visible: true},
|
||||
{key: 14, label: `装备原始编码`, prop: 'originalCode', visible: true},
|
||||
{key: 15, label: `计量单位`, prop: 'unit', visible: true},
|
||||
{key: 16, label: `生产厂家`, prop: 'manufacturer', visible: true},
|
||||
{key: 17, label: `出厂日期`, prop: 'productionDate', visible: true},
|
||||
{key: 18, label: `采购日期`, prop: 'purchaseDate', visible: true},
|
||||
{key: 19, label: `资产原值(元)`, prop: 'originalValue', visible: true},
|
||||
{key: 20, label: `最大使用年限(年)`, prop: 'maxServiceLifeYears', visible: true},
|
||||
{key: 21, label: `下次维保日期`, prop: 'nextMaintenanceDate', visible: true},
|
||||
{key: 22, label: `装备外观`, prop: 'appearanceImages', visible: true},
|
||||
{key: 23, label: `合格证`, prop: 'certificates', visible: true},
|
||||
{key: 24, label: `定期检验报告`, prop: 'inspectionReports', visible: true},
|
||||
{key: 25, label: `采购发票`, prop: 'purchaseInvoices', visible: true},
|
||||
{key: 26, label: `特征项1`, prop: 'featureItem1', visible: true},
|
||||
{key: 27, label: `特征值1`, prop: 'featureValue1', visible: true},
|
||||
{key: 28, label: `特征项2`, prop: 'featureItem2', visible: true},
|
||||
{key: 29, label: `特征值2`, prop: 'featureValue2', visible: true},
|
||||
{key: 30, label: `特征项3`, prop: 'featureItem3', visible: true},
|
||||
{key: 31, label: `特征值3`, prop: 'featureValue3', visible: true},
|
||||
{key: 32, label: `特征项4`, prop: 'featureItem4', visible: true},
|
||||
{key: 33, label: `特征值4`, prop: 'featureValue4', visible: true},
|
||||
{key: 34, label: `特征项5`, prop: 'featureItem5', visible: true},
|
||||
{key: 35, label: `特征值5`, prop: 'featureValue5', visible: true},
|
||||
{key: 36, label: `特征项6`, prop: 'featureItem6', visible: true},
|
||||
{key: 37, label: `特征值6`, prop: 'featureValue6', visible: true},
|
||||
{key: 38, label: `特征项7`, prop: 'featureItem7', visible: true},
|
||||
{key: 39, label: `特征值7`, prop: 'featureValue7', visible: true},
|
||||
{key: 40, label: `特征项8`, prop: 'featureItem8', visible: true},
|
||||
{key: 41, label: `特征值8`, prop: 'featureValue8', visible: true},
|
||||
{key: 42, label: `特征项9`, prop: 'featureItem9', visible: true},
|
||||
{key: 43, label: `特征值9`, prop: 'featureValue9', visible: true},
|
||||
],
|
||||
tableData: [],
|
||||
tableColumns: 0,
|
||||
|
|
@ -905,9 +948,9 @@ export default {
|
|||
},
|
||||
// 表单验证规则
|
||||
formRules: {
|
||||
name: [{ required: true, message: '请输入类型分支', trigger: 'blur' }],
|
||||
code: [{ required: true, message: '请输入装备编号', trigger: 'blur' }],
|
||||
changeStatus: [{ required: true, message: '请选择装备状态', trigger: 'change' }],
|
||||
name: [{required: true, message: '请输入类型分支', trigger: 'blur'}],
|
||||
code: [{required: true, message: '请输入装备编号', trigger: 'blur'}],
|
||||
changeStatus: [{required: true, message: '请选择装备状态', trigger: 'change'}],
|
||||
},
|
||||
maxFeatureCount: 5, // 最大特征项数量限制
|
||||
dialogVisible: false,
|
||||
|
|
@ -960,7 +1003,7 @@ export default {
|
|||
this.processList = []
|
||||
this.queryParams.process = ''
|
||||
} else {
|
||||
secondAndThirdLevel({ firstLevelId: item }).then((res) => {
|
||||
secondAndThirdLevel({firstLevelId: item}).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.processList = this.convertToSubTree(res.data)
|
||||
}
|
||||
|
|
@ -1062,9 +1105,6 @@ export default {
|
|||
onHandleRetire() {
|
||||
this.$router.push('/equipment/equ-retire')
|
||||
},
|
||||
onHandleReturn() {
|
||||
this.$router.push('/equipment/equStore')
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出数据
|
||||
|
|
@ -1075,7 +1115,7 @@ export default {
|
|||
try {
|
||||
let fileName = `装备台账_${new Date().getTime()}.xLsx`
|
||||
let url = '/material-mall/device/export'
|
||||
const params = { ...this.queryParams }
|
||||
const params = {...this.queryParams}
|
||||
console.log('🚀 ~ 导出 ~ params:', params)
|
||||
this.download(url, params, fileName)
|
||||
} catch (error) {
|
||||
|
|
@ -1083,22 +1123,227 @@ export default {
|
|||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 获取左侧树形结构数据
|
||||
*/
|
||||
async getDeviceTree() {
|
||||
try {
|
||||
this.treeLoading = true
|
||||
const res = await getDeviceTreeAPI()
|
||||
this.treeData = res.data ? [res.data] : []
|
||||
this.treeLoading = true;
|
||||
const res = await getDeviceTreeAPI();
|
||||
this.treeData = res.data ? [res.data] : [];
|
||||
|
||||
// 👇 加这一行
|
||||
console.log('treeData', JSON.stringify(this.treeData, null, 2));
|
||||
|
||||
// 重置默认展开的节点ID数组
|
||||
this.defaultExpandedKeys = [];
|
||||
|
||||
// 只收集第一级和第二级节点的ID,第三级默认不展开
|
||||
this.collectFirstAndSecondLevelKeys(this.treeData);
|
||||
console.log('✅ defaultExpandedKeys:', this.defaultExpandedKeys);
|
||||
|
||||
// 3. 关键:等 DOM 渲染完再赋值
|
||||
this.$nextTick(() => {
|
||||
this.defaultExpandedKeys = [...this.defaultExpandedKeys];
|
||||
});
|
||||
|
||||
console.log('默认展开的第一级和第二级节点ID:', this.defaultExpandedKeys);
|
||||
} catch (error) {
|
||||
this.$message.error('获取树形结构失败:' + (error.message || '未知错误'))
|
||||
console.error(error)
|
||||
this.$message.error('获取树形结构失败:' + (error.message || '未知错误'));
|
||||
console.error(error);
|
||||
} finally {
|
||||
this.treeLoading = false
|
||||
this.treeLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 收集第一级和第二级节点的ID,第三级默认不展开
|
||||
*/
|
||||
collectFirstAndSecondLevelKeys(nodes) {
|
||||
if (!nodes || !nodes.length) return;
|
||||
|
||||
nodes.forEach(firstLevelNode => {
|
||||
// 展开第一级节点
|
||||
if (firstLevelNode.id) {
|
||||
this.defaultExpandedKeys.push(firstLevelNode.id);
|
||||
console.log(`展开第一级节点: ${firstLevelNode.name}, ID: ${firstLevelNode.id}`);
|
||||
}
|
||||
|
||||
// 检查是否有子节点(第二级节点)
|
||||
if (firstLevelNode.children && firstLevelNode.children.length) {
|
||||
// 遍历所有第二级节点
|
||||
firstLevelNode.children.forEach(secondLevelNode => {
|
||||
if (secondLevelNode.id) {
|
||||
this.defaultExpandedKeys.push(secondLevelNode.id);
|
||||
console.log(`展开第二级节点: ${secondLevelNode.name}, ID: ${secondLevelNode.id}`);
|
||||
// 第三级及更深层级默认不展开(保持折叠状态)
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 左侧树查询:匹配节点显示自身及下一级,但默认只显示到第二级
|
||||
*/
|
||||
async getDeviceListByTreeSearch() {
|
||||
try {
|
||||
// 1. 获取输入的查询关键词(去空格)
|
||||
const searchKey = this.treeSearchKey ? this.treeSearchKey.trim() : '';
|
||||
|
||||
// 如果没有搜索关键词,则重置为原始树(显示到第二级)
|
||||
if (!searchKey) {
|
||||
await this.resetTreeSearch();
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 重新获取原始树形数据
|
||||
this.treeLoading = true;
|
||||
const res = await getDeviceTreeAPI();
|
||||
const originalTreeData = res.data ? [res.data] : [];
|
||||
|
||||
// 3. 筛选逻辑:匹配节点显示自身及下一级
|
||||
const filteredTreeData = this.filterTreeWithNextLevel(originalTreeData, searchKey);
|
||||
|
||||
// 4. 收集所有匹配节点的ID,用于默认展开
|
||||
const expandedIds = [];
|
||||
this.collectMatchedNodeIds(filteredTreeData, searchKey, expandedIds);
|
||||
|
||||
// 5. 更新树形数据和默认展开节点
|
||||
this.treeData = filteredTreeData;
|
||||
this.defaultExpandedKeys = expandedIds;
|
||||
|
||||
// 6. 无匹配结果时提示
|
||||
if (filteredTreeData.length === 0 || this.isTreeEmpty(filteredTreeData)) {
|
||||
this.$message.info('未找到匹配的类型分支');
|
||||
} else {
|
||||
this.$message.success(`找到 ${expandedIds.length} 个匹配项`);
|
||||
}
|
||||
} catch (error) {
|
||||
this.$message.error('树形查询失败:' + (error.message || '未知错误'));
|
||||
console.error(error);
|
||||
} finally {
|
||||
this.treeLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 辅助方法:筛选节点并包含下一级
|
||||
*/
|
||||
filterTreeWithNextLevel(treeData, key) {
|
||||
if (!treeData || !treeData.length) return [];
|
||||
|
||||
return treeData
|
||||
.map(node => {
|
||||
// 深拷贝节点
|
||||
const newNode = {...node};
|
||||
|
||||
const isNodeMatch = key ? node.name.includes(key) : true;
|
||||
|
||||
if (isNodeMatch) {
|
||||
// 匹配节点:保留所有直接子节点
|
||||
if (newNode.children && newNode.children.length) {
|
||||
// 保留第二级,但第三级及更深层级保持原样(默认不展开)
|
||||
newNode.children = [...newNode.children];
|
||||
}
|
||||
return newNode;
|
||||
} else {
|
||||
// 不匹配节点:检查子节点是否有匹配的
|
||||
if (newNode.children && newNode.children.length) {
|
||||
const filteredChildren = this.filterTreeWithNextLevel(newNode.children, key);
|
||||
|
||||
if (filteredChildren.length > 0) {
|
||||
newNode.children = filteredChildren;
|
||||
return newNode;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter(node => node !== null);
|
||||
},
|
||||
|
||||
/**
|
||||
* 辅助方法:收集所有匹配关键词的节点ID(用于默认展开)
|
||||
* @param {Array} treeData - 筛选后的树形数据
|
||||
* @param {String} key - 查询关键词
|
||||
* @param {Array} expandedIds - 存储展开节点ID的数组
|
||||
*/
|
||||
collectMatchedNodeIds(treeData, key, expandedIds) {
|
||||
if (!treeData || !treeData.length) return;
|
||||
|
||||
treeData.forEach(node => {
|
||||
// 若当前节点匹配关键词,记录其ID(用于展开)
|
||||
if (key ? node.name.includes(key) : true) {
|
||||
if (node.id) expandedIds.push(node.id);
|
||||
}
|
||||
|
||||
// 递归处理子级,确保深层子级的匹配节点也被收集
|
||||
if (node.children && node.children.length) {
|
||||
this.collectMatchedNodeIds(node.children, key, expandedIds);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 辅助方法:检查树是否为空(没有任何有效节点)
|
||||
*/
|
||||
isTreeEmpty(treeData) {
|
||||
if (!treeData || !treeData.length) return true;
|
||||
|
||||
// 递归检查所有节点
|
||||
for (const node of treeData) {
|
||||
if (node && node.id) {
|
||||
return false; // 发现有效节点
|
||||
}
|
||||
if (node.children && node.children.length) {
|
||||
if (!this.isTreeEmpty(node.children)) {
|
||||
return false; // 子节点中有有效节点
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 左侧树重置:仅恢复树形原始状态(不联动右侧列表)
|
||||
*/
|
||||
/**
|
||||
* 左侧树重置:恢复树形原始状态,默认显示到第二级
|
||||
*/
|
||||
async resetTreeSearch() {
|
||||
try {
|
||||
// 1. 清空左侧表单输入和查询参数
|
||||
if (this.$refs.queryFormLeft) {
|
||||
this.$refs.queryFormLeft.resetFields();
|
||||
}
|
||||
this.treeSearchKey = ''; // 手动清空类型分支查询值
|
||||
this.queryParams.typeId = undefined; // 清空可能存在的节点ID缓存
|
||||
|
||||
// 2. 恢复原始树形数据,默认显示到第二级
|
||||
this.treeLoading = true;
|
||||
const res = await getDeviceTreeAPI();
|
||||
this.treeData = res.data ? [res.data] : [];
|
||||
|
||||
// 重置默认展开的节点ID数组
|
||||
this.defaultExpandedKeys = [];
|
||||
|
||||
// 只展开第一级和第二级节点
|
||||
this.collectFirstAndSecondLevelKeys(this.treeData);
|
||||
|
||||
this.$message.success('树形查询已重置');
|
||||
} catch (error) {
|
||||
this.$message.error('树形重置失败:' + (error.message || '未知错误'));
|
||||
console.error(error);
|
||||
} finally {
|
||||
this.treeLoading = false;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 获取右侧列表数据
|
||||
*/
|
||||
|
|
@ -1135,7 +1380,7 @@ export default {
|
|||
async onHandlePreview(row) {
|
||||
// this.formData = row
|
||||
// this.previewDialogVisible = true
|
||||
this.$router.push({ path: '/equipment/details', query: { id: row.maId } })
|
||||
this.$router.push({path: '/equipment/details', query: {id: row.maId}})
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -1346,7 +1591,7 @@ export default {
|
|||
async getDeviceStatusCount() {
|
||||
try {
|
||||
const res = await getDeviceStatusCountAPI()
|
||||
const { inStock, ownUse, share, underRepair } = res.data || {}
|
||||
const {inStock, ownUse, share, underRepair} = res.data || {}
|
||||
this.inStock = inStock || 0
|
||||
this.ownUse = ownUse || 0
|
||||
this.share = share || 0
|
||||
|
|
@ -1401,10 +1646,16 @@ export default {
|
|||
// 最后加载列表数据
|
||||
await this.getDeviceList()
|
||||
},
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
|
||||
<style scoped>
|
||||
|
||||
|
||||
.app-container {
|
||||
padding: 20px;
|
||||
background-color: #f5f7fa;
|
||||
|
|
@ -1693,27 +1944,49 @@ export default {
|
|||
flex-direction: row;
|
||||
}
|
||||
|
||||
::v-deep .el-table {
|
||||
// 启用斑马纹
|
||||
&.el-table--striped .el-table__body {
|
||||
tr.el-table__row--striped td {
|
||||
background-color: #F6FBFA !important; // 浅紫色
|
||||
}
|
||||
}
|
||||
|
||||
.el-table__header {
|
||||
background: #E9F0EE;
|
||||
|
||||
th {
|
||||
background: #E9F0EE !important;
|
||||
color: #606266;
|
||||
font-weight: 600;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
|
||||
background-color: #CCF1E9 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 简洁紧凑版树搜索输入框样式 */
|
||||
.tree-search-input ::v-deep .el-input__inner {
|
||||
padding-right: 65px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tree-search-input ::v-deep .el-input__suffix {
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.tree-search-buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
gap: 0; /* 关键:移除按钮间距 */
|
||||
}
|
||||
|
||||
.search-btn-embedded {
|
||||
border: none !important;
|
||||
background: transparent !important;
|
||||
color: #909399 !important;
|
||||
border-radius: 0 !important;
|
||||
padding: 11px 8px !important; /* 适中的内边距 */
|
||||
height: 100% !important;
|
||||
min-width: 24px !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
}
|
||||
|
||||
.search-btn-embedded:hover {
|
||||
color: #409EFF !important;
|
||||
background-color: #f5f7fa !important;
|
||||
}
|
||||
|
||||
.tree-search-input ::v-deep .el-input__clear {
|
||||
right: 55px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
Loading…
Reference in New Issue