装备退库

This commit is contained in:
bb_pan 2025-10-30 10:15:09 +08:00
parent 47243ce237
commit fa7c2a98fe
2 changed files with 192 additions and 190 deletions

View File

@ -1,119 +1,120 @@
<template> <template>
<!-- 装备退库页面 --> <!-- 装备退库页面 -->
<div class="app-container"> <div class="app-container">
<div class="page-header"> <div class="card">
<el-button type="text" icon="el-icon-arrow-left" @click="goBack">返回</el-button> <div class="page-header">
<span class="page-title">装备退库</span> <el-button type="text" icon="el-icon-arrow-left" @click="goBack">返回</el-button>
<span class="page-title">装备退库</span>
</div>
<el-form ref="outFormRef" :model="outForm" :rules="outFormRules" label-width="130px" inline size="small">
<el-form-item label="需求单位" prop="propertyUnitId">
<el-select
v-model="outForm.propertyUnitId"
placeholder="请选择需求单位"
clearable
filterable
style="width: 240px"
>
<el-option v-for="item in propertyUnitList" :key="item.id" :label="item.label" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="使用项目:" prop="proCode">
<el-select
clearable
style="width: 240px"
placeholder="请选择使用项目"
v-model="outForm.proCode"
@change="onChangeProCode"
>
<el-option :key="item.proCode" :label="item.proName" :value="item.proCode" v-for="item in useProjectList" />
</el-select>
</el-form-item>
<el-form-item label="项目类型:" prop="proType">
<el-input style="width: 240px" disabled v-model="proTypeName" />
</el-form-item>
<el-form-item label="电压等级:" prop="voltageLevel">
<el-input style="width: 240px" disabled v-model="voltageLevel" />
</el-form-item>
<el-form-item label="项目所在省:" prop="proProvince">
<el-input style="width: 240px" disabled v-model="outForm.proProvince" />
</el-form-item>
<el-form-item label="项目所在市:" prop="proCity">
<el-input style="width: 240px" disabled v-model="outForm.proCity" />
</el-form-item>
<el-form-item label="项目所在区/县:" prop="proCounty">
<el-input style="width: 240px" disabled v-model="outForm.proCounty" />
</el-form-item>
<el-form-item label="详细地址:" prop="proLocation">
<el-input v-model="outForm.proLocation" placeholder="请输入详细地址" clearable style="width: 240px" />
</el-form-item>
</el-form>
</div> </div>
<el-form ref="outFormRef" :model="outForm" :rules="outFormRules" label-width="auto" size="small"> <div class="card" style="margin-top: 10px">
<el-row :gutter="20" type="flex"> <el-row :gutter="0">
<el-col> <el-col :span="12"><span style="font-weight: 800">装备退库列表</span></el-col>
<el-form-item label="变更状态为" prop="status"> <el-col :span="12" style="text-align: end">
<el-radio-group v-model="outForm.status"> <el-button size="mini" type="primary" icon="el-icon-plus" @click="onHandleAddEquipment">添加装备</el-button>
<el-radio label="1">在库</el-radio> <el-button size="mini" type="primary" @click="onHandleSubmit"> 确定退库 </el-button>
<el-radio label="5">维修</el-radio>
</el-radio-group>
<el-button size="mini" style="margin-left: 80px" type="primary" @click="onHandleSubmit">
确定变更
</el-button>
<el-button size="mini" plain @click="resetForm">取消</el-button>
</el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20" type="flex"> <el-table :data="selectedEquipment" border stripe>
<el-col :span="6"> <el-table-column label="序号" type="index" align="center" width="55" />
<el-form-item label="使用项目:" prop="proCode"> <el-table-column prop="devName" label="装备名称" align="center" />
<el-select <el-table-column prop="devName" label="装备系列" align="center" />
<el-table-column prop="devModel" label="规格型号" align="center" />
<el-table-column prop="devCode" label="装备编码" align="center" />
<el-table-column label="入库数量" align="center">
<template slot-scope="{ row }">
<!-- <el-input-number
clearable clearable
style="width: 100%" style="width: 240px"
placeholder="请选择使用项目" placeholder="请输入入库数量"
v-model="outForm.proCode" v-model="row.inNum"
@change="onChangeProCode" :controls="false"
> /> -->
<el-option <span>1</span>
:key="item.proCode" </template>
:label="item.proName" </el-table-column>
:value="item.proCode" <el-table-column prop="status" label="装备状态" align="center">
v-for="item in useProjectList" <template slot-scope="{ row }">
/> <span v-if="row.status == 1" size="mini">在库</span>
<span v-if="row.status == 2" size="mini">自用</span>
<span v-if="row.status == 3" size="mini">共享</span>
<span v-if="row.status == 5" size="mini">维修</span>
</template>
</el-table-column>
<el-table-column label="使用到期日期" align="center">
<template slot-scope="scope">
<el-date-picker
type="date"
v-model="scope.row.useTime"
placeholder="选择使用日期"
value-format="yyyy-MM-dd"
:class="{ 'error-border': scope.row.validationError && scope.row.validationError.useTime }"
/>
<span class="error-text" v-if="scope.row.validationError && scope.row.validationError.useTime">
使用到期日期不能为空
</span>
</template>
</el-table-column>
<!-- 是否维修 -->
<el-table-column label="是否维修" align="center">
<template slot-scope="{ row }">
<el-select v-model="row.isRepair" placeholder="请选择是否维修">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select> </el-select>
</el-form-item> </template>
</el-col> </el-table-column>
<el-col :span="6"> <el-table-column label="操作" align="center">
<el-form-item label="项目类型:" prop="proType"> <template slot-scope="scope">
<el-input style="width: 100%" disabled v-model="proTypeName" /> <el-button type="danger" size="mini" @click="onHandleDelete(scope.$index)">删除</el-button>
</el-form-item> </template>
</el-col> </el-table-column>
<el-col :span="6"> </el-table>
<el-form-item label="电压等级:" prop="voltageLevel"> </div>
<el-input style="width: 100%" disabled v-model="voltageLevel" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目所在省:" prop="proProvince">
<el-input style="width: 100%" disabled v-model="outForm.proProvince" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="6">
<el-form-item label="项目所在市:" prop="proCity">
<el-input style="width: 100%" disabled v-model="outForm.proCity" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目所在区/县:" prop="proCounty">
<el-input style="width: 100%" disabled v-model="outForm.proCounty" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="详细地址:" prop="proLocation">
<el-input v-model="outForm.proLocation" placeholder="请输入详细地址" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 10px">
<el-button size="mini" type="primary" @click="onHandleAddEquipment">添加变更装备</el-button>
<el-button
size="mini"
type="danger"
@click="removeSelectedEquipment"
:disabled="selectedEquipment.length === 0"
>
批量删除
</el-button>
</el-row>
</el-form>
<el-table :data="selectedEquipment" border stripe>
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column prop="devName" label="装备名称" align="center" />
<el-table-column prop="devModel" label="规格型号" align="center" />
<el-table-column prop="devCode" label="装备编码" align="center" />
<el-table-column label="使用到期日期" align="center">
<template slot-scope="scope">
<el-date-picker
type="date"
v-model="scope.row.useTime"
placeholder="选择使用日期"
value-format="yyyy-MM-dd"
:class="{ 'error-border': scope.row.validationError && scope.row.validationError.useTime }"
/>
<span class="error-text" v-if="scope.row.validationError && scope.row.validationError.useTime">
使用到期日期不能为空
</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="danger" size="mini" @click="onHandleDelete(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="添加变更装备" :visible.sync="addEquipmentVisible" width="90%" @close="handleDialogClose"> <el-dialog title="添加变更装备" :visible.sync="addEquipmentVisible" width="90%" @close="handleDialogClose">
<el-form :inline="true" label-width="auto"> <el-form :inline="true" label-width="auto">
@ -133,9 +134,7 @@
<el-form-item> <el-form-item>
<el-button size="mini" type="primary" @click="onHandleAddEquipmentQuery">查询</el-button> <el-button size="mini" type="primary" @click="onHandleAddEquipmentQuery">查询</el-button>
<el-button size="mini" plain @click="onHandleAddEquipmentReset">重置</el-button> <el-button size="mini" plain @click="onHandleAddEquipmentReset">重置</el-button>
<el-button size="mini" type="primary" @click="onHandleAddEquipmentConfirm"> <el-button size="mini" type="primary" @click="onHandleAddEquipmentConfirm"> 确定添加 </el-button>
确定添加
</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -146,7 +145,7 @@
border border
@selection-change="handleSelectionAddEquipment" @selection-change="handleSelectionAddEquipment"
ref="equipmentTable" ref="equipmentTable"
:row-key="row => row.devId" :row-key="(row) => row.devId"
> >
<el-table-column label="序号" type="index" align="center" width="55" /> <el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column width="55" align="center" type="selection" /> <el-table-column width="55" align="center" type="selection" />
@ -157,63 +156,39 @@
<el-table-column align="center" show-overflow-tooltip prop="changeStatus" label="状态"> <el-table-column align="center" show-overflow-tooltip prop="changeStatus" label="状态">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.status == 1" size="mini">在库</el-tag> <el-tag v-if="scope.row.status == 1" size="mini">在库</el-tag>
<el-tag v-if="scope.row.status == 2 || scope.row.status == 3" size="mini"> <el-tag v-if="scope.row.status == 2 || scope.row.status == 3" size="mini"> 在用 </el-tag>
在用
</el-tag>
<el-tag v-if="scope.row.status == 5" size="mini"> 维修 </el-tag> <el-tag v-if="scope.row.status == 5" size="mini"> 维修 </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="160" show-overflow-tooltip prop="unit" label="计数单位" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="unit" label="计数单位" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="compName" label="产权单位" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="compName" label="产权单位" align="center" />
<el-table-column <el-table-column width="160" show-overflow-tooltip prop="buyPrice" label="资产原值(元)" align="center" />
width="160"
show-overflow-tooltip
prop="buyPrice"
label="资产原值(元)"
align="center"
/>
<el-table-column width="160" show-overflow-tooltip prop="productDate" label="出厂日期" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="productDate" label="出厂日期" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="useYears" label="使用年限" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="useYears" label="使用年限" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="proName" label="所在项目" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="proName" label="所在项目" align="center" />
<el-table-column <el-table-column width="160" show-overflow-tooltip prop="nextDate" label="下次检验日期" align="center" />
width="160"
show-overflow-tooltip
prop="nextDate"
label="下次检验日期"
align="center"
/>
<el-table-column width="160" show-overflow-tooltip prop="manufacturer" label="生产厂商" align="center" /> <el-table-column width="160" show-overflow-tooltip prop="manufacturer" label="生产厂商" align="center" />
<template v-for="item in tableColumns"> <template v-for="item in tableColumns">
<!-- 特征项列 --> <!-- 特征项列 -->
<el-table-column <el-table-column :key="'item-' + item" align="center" show-overflow-tooltip :label="'特征项' + item">
:key="'item-' + item"
align="center"
show-overflow-tooltip
:label="'特征项' + item"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.propertyVoList && scope.row.propertyVoList.length > 0"> <span v-if="scope.row.propertyVoList && scope.row.propertyVoList.length > 0">
<span v-if="item - 1 < scope.row.propertyVoList.length"> <span v-if="item - 1 < scope.row.propertyVoList.length">
{{ scope.row.propertyVoList[item - 1].propertyName || '-' }} {{ scope.row.propertyVoList[item - 1].propertyName || '-' }}
</span> </span>
</span> </span>
<span v-else> - </span> <span v-else> - </span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 特征值列 --> <!-- 特征值列 -->
<el-table-column <el-table-column :key="'value-' + item" align="center" show-overflow-tooltip :label="'特征值' + item">
:key="'value-' + item"
align="center"
show-overflow-tooltip
:label="'特征值' + item"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.propertyVoList && scope.row.propertyVoList.length > 0"> <span v-if="scope.row.propertyVoList && scope.row.propertyVoList.length > 0">
<span v-if="item - 1 < scope.row.propertyVoList.length"> <span v-if="item - 1 < scope.row.propertyVoList.length">
{{ scope.row.propertyVoList[item - 1].propertyValue || '-' }} {{ scope.row.propertyVoList[item - 1].propertyValue || '-' }}
</span> </span>
</span> </span>
<span v-else> - </span> <span v-else> - </span>
</template> </template>
@ -240,8 +215,9 @@ import {
getVoltageListAPI, getVoltageListAPI,
addProjectOutAPI, addProjectOutAPI,
} from '@/api/EquipmentLedger/equ-out' } from '@/api/EquipmentLedger/equ-out'
import { deptTreeSelect } from '@/api/system/user'
import { addProjectStoreAPI } from '@/api/EquipmentLedger/equ-store.js' import { addProjectStoreAPI } from '@/api/EquipmentLedger/equ-store.js'
export default { export default {
data() { data() {
return { return {
@ -263,9 +239,11 @@ export default {
proCity: '', // proCity: '', //
proCounty: '', // / proCounty: '', // /
proLocation: '', // proLocation: '', //
propertyUnitId: '', // ID
}, },
// //
outFormRules: { outFormRules: {
propertyUnitId: [{ required: true, message: '请选择需求单位', trigger: 'change' }],
status: [{ required: true, message: '请选择变更状态', trigger: 'change' }], status: [{ required: true, message: '请选择变更状态', trigger: 'change' }],
proCode: [{ required: true, message: '请选择使用项目', trigger: 'change' }], proCode: [{ required: true, message: '请选择使用项目', trigger: 'change' }],
proType: [{ required: true, message: '请选择项目类型', trigger: 'change' }], proType: [{ required: true, message: '请选择项目类型', trigger: 'change' }],
@ -276,6 +254,7 @@ export default {
proLocation: [{ required: true, message: '请选择详细地址', trigger: 'change' }], proLocation: [{ required: true, message: '请选择详细地址', trigger: 'change' }],
}, },
equipmentList: [], equipmentList: [],
propertyUnitList: [], //
provinceList: [], provinceList: [],
cityList: [], cityList: [],
@ -303,6 +282,7 @@ export default {
}, },
created() { created() {
this.getUseProjectList() this.getUseProjectList()
this.getDeptTreeSelect()
this.provinceList = regionData this.provinceList = regionData
}, },
methods: { methods: {
@ -310,7 +290,23 @@ export default {
goBack() { goBack() {
this.$router.go(-1) this.$router.go(-1)
}, },
//
getDeptTreeSelect() {
deptTreeSelect().then((res) => {
this.propertyUnitList = this.filterTree(res.data)
console.log('🚀 ~ getDeptTreeSelect ~ this.propertyUnitList:', this.propertyUnitList)
})
},
filterTree(nodes) {
return nodes
.map((node) => {
if (node.children) {
node.children = this.filterTree(node.children)
}
return node
})
.filter((node) => node.status !== '1')
},
// //
getSelectEquipmentList() { getSelectEquipmentList() {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -343,7 +339,7 @@ export default {
this.$refs.equipmentTable.clearSelection() this.$refs.equipmentTable.clearSelection()
// //
this.addEquipmentList.forEach(item => { this.addEquipmentList.forEach((item) => {
if (this.selectedIds.has(item.devId)) { if (this.selectedIds.has(item.devId)) {
setTimeout(() => { setTimeout(() => {
this.$refs.equipmentTable.toggleRowSelection(item, true) this.$refs.equipmentTable.toggleRowSelection(item, true)
@ -398,7 +394,7 @@ export default {
let isValid = true let isValid = true
// //
this.selectedEquipment.forEach(row => { this.selectedEquipment.forEach((row) => {
row.validationError = {} row.validationError = {}
// 使 // 使
@ -479,7 +475,7 @@ export default {
this.$modal.confirm('确认移除选中的装备吗?').then(() => { this.$modal.confirm('确认移除选中的装备吗?').then(() => {
// ID // ID
this.selectedEquipment.forEach(item => { this.selectedEquipment.forEach((item) => {
this.selectedIds.delete(item.devId) this.selectedIds.delete(item.devId)
}) })
this.selectedEquipment = [] this.selectedEquipment = []
@ -494,15 +490,15 @@ export default {
// //
handleSelectionAddEquipment(selection) { handleSelectionAddEquipment(selection) {
// //
this.currentDialogSelected = selection.map(item => ({ this.currentDialogSelected = selection.map((item) => ({
...item, ...item,
useTime: '', useTime: '',
validationError: {} validationError: {},
})) }))
// ID // ID
this.selectedIds.clear() this.selectedIds.clear()
selection.forEach(item => { selection.forEach((item) => {
this.selectedIds.add(item.devId) this.selectedIds.add(item.devId)
}) })
}, },
@ -515,8 +511,8 @@ export default {
} }
// //
const newItems = this.currentDialogSelected.filter(newItem => const newItems = this.currentDialogSelected.filter(
!this.selectedEquipment.some(existing => existing.devId === newItem.devId) (newItem) => !this.selectedEquipment.some((existing) => existing.devId === newItem.devId),
) )
if (newItems.length > 0) { if (newItems.length > 0) {
@ -581,6 +577,13 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container { .app-container {
padding: 20px; padding: 20px;
background-color: #f2f2f2;
}
.card {
padding: 15px;
background-color: #fff;
border-radius: 8px;
} }
.page-header { .page-header {
@ -618,27 +621,26 @@ export default {
} }
::v-deep .el-table { ::v-deep .el-table {
// //
&.el-table--striped .el-table__body { &.el-table--striped .el-table__body {
tr.el-table__row--striped td { tr.el-table__row--striped td {
background-color: #F6FBFA !important; // 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;
} }
} }
</style>
.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;
}
}
</style>

View File

@ -140,8 +140,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="类型分支" prop="name"> <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-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
@ -513,7 +513,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="类型分支" prop="name"> <el-form-item label="装备名称" prop="name">
<el-input v-model="formData.name" disabled/> <el-input v-model="formData.name" disabled/>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -645,7 +645,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="类型分支" prop="name"> <el-form-item label="装备名称" prop="name">
<el-input v-model="formData.name"/> <el-input v-model="formData.name"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -819,7 +819,7 @@ export default {
queryParams: { queryParams: {
province: undefined, // province: undefined, //
propertyUnitId: undefined, // propertyUnitId: undefined, //
name: undefined, // name: undefined, //
specificationModel: undefined, // specificationModel: undefined, //
major: undefined, // major: undefined, //
process: undefined, // process: undefined, //
@ -858,7 +858,7 @@ export default {
{key: 2, label: `专业`, prop: 'major', visible: true}, {key: 2, label: `专业`, prop: 'major', visible: true},
{key: 3, label: `工序`, prop: 'process', visible: true}, {key: 3, label: `工序`, prop: 'process', visible: true},
{key: 4, label: `装备类目`, prop: 'devType', visible: true}, {key: 4, label: `装备类目`, prop: 'devType', visible: true},
{key: 5, label: `类型分支`, prop: 'name', visible: true}, {key: 5, label: `装备名称`, prop: 'name', visible: true},
{key: 6, label: `规格型号`, prop: 'specificationModel', visible: true}, {key: 6, label: `规格型号`, prop: 'specificationModel', visible: true},
{key: 7, label: `装备编码`, prop: 'code', visible: true}, {key: 7, label: `装备编码`, prop: 'code', visible: true},
{key: 8, label: `装备状态`, prop: 'status', visible: true}, {key: 8, label: `装备状态`, prop: 'status', visible: true},
@ -945,7 +945,7 @@ export default {
}, },
// //
formRules: { formRules: {
name: [{required: true, message: '请输入类型分支', trigger: 'blur'}], name: [{required: true, message: '请输入装备名称', trigger: 'blur'}],
code: [{required: true, message: '请输入装备编号', trigger: 'blur'}], code: [{required: true, message: '请输入装备编号', trigger: 'blur'}],
changeStatus: [{required: true, message: '请选择装备状态', trigger: 'change'}], changeStatus: [{required: true, message: '请选择装备状态', trigger: 'change'}],
}, },
@ -1217,7 +1217,7 @@ export default {
// 6. // 6.
if (filteredTreeData.length === 0 || this.isTreeEmpty(filteredTreeData)) { if (filteredTreeData.length === 0 || this.isTreeEmpty(filteredTreeData)) {
this.$message.info('未找到匹配的类型分支'); this.$message.info('未找到匹配的装备名称');
} else { } else {
this.$message.success(`找到 ${expandedIds.length} 个匹配项`); this.$message.success(`找到 ${expandedIds.length} 个匹配项`);
} }
@ -1320,7 +1320,7 @@ export default {
if (this.$refs.queryFormLeft) { if (this.$refs.queryFormLeft) {
this.$refs.queryFormLeft.resetFields(); this.$refs.queryFormLeft.resetFields();
} }
this.treeSearchKey = ''; // this.treeSearchKey = ''; //
this.queryParams.typeId = undefined; // ID this.queryParams.typeId = undefined; // ID
// 2. // 2.