代码提交

This commit is contained in:
jiang 2025-11-03 09:19:07 +08:00
parent 307997e527
commit 8c8d127590
8 changed files with 2478 additions and 2424 deletions

View File

@ -220,7 +220,7 @@ export default {
pageNum: 1,
pageSize: 10,
name: '',
status: '2',
status: '5',
companyId: '',
proId: ''
},

View File

@ -16,7 +16,7 @@
filterable
style="width: 240px"
>
<el-option v-for="item in propertyUnitList" :key="item.id" :label="item.label" :value="item.id" />
<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">
@ -27,26 +27,26 @@
v-model="outForm.proCode"
@change="onChangeProCode"
>
<el-option :key="item.proCode" :label="item.proName" :value="item.proCode" v-for="item in useProjectList" />
<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-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-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-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-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-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-input v-model="outForm.proLocation" placeholder="请输入详细地址" clearable style="width: 240px"/>
</el-form-item>
</el-form>
</div>
@ -56,12 +56,12 @@
<el-col :span="12"><span style="font-weight: 800">装备退库列表</span></el-col>
<el-col :span="12" style="text-align: end">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="onHandleAddEquipment">添加装备</el-button>
<el-button size="mini" type="primary" @click="onHandleSubmit"> 确定退库 </el-button>
<el-button size="mini" type="primary" @click="onHandleSubmit"> 确定退库</el-button>
</el-col>
</el-row>
<el-table :data="selectedEquipment" border stripe>
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column prop="name" label="装备名称" align="center" />
<el-table-column label="序号" type="index" align="center" width="55"/>
<el-table-column prop="name" label="装备名称" align="center"/>
<el-table-column prop="devCategory" label="装备类目" align="center">
<template slot-scope="{ row }">
<span>
@ -70,8 +70,8 @@
</span>
</template>
</el-table-column>
<el-table-column prop="specificationModel" label="规格型号" align="center" />
<el-table-column prop="code" label="装备编码" align="center" />
<el-table-column prop="specificationModel" label="规格型号" align="center"/>
<el-table-column prop="code" label="装备编码" align="center"/>
<el-table-column label="入库数量" align="center">
<template slot-scope="{ row }">
<!-- <el-input-number
@ -111,8 +111,8 @@
<el-table-column label="是否维修" align="center">
<template slot-scope="{ row }">
<el-select v-model="row.changeStatus" placeholder="请选择是否维修">
<el-option label="是" value="5" />
<el-option label="否" value="1" />
<el-option label="否" value="1"/>
<el-option label="是" value="5"/>
</el-select>
</template>
</el-table-column>
@ -142,7 +142,7 @@
<el-form-item>
<el-button size="mini" type="primary" @click="onHandleAddEquipmentQuery">查询</el-button>
<el-button size="mini" plain @click="onHandleAddEquipmentReset">重置</el-button>
<el-button size="mini" type="primary" @click="onHandleAddEquipmentConfirm"> 确定添加 </el-button>
<el-button size="mini" type="primary" @click="onHandleAddEquipmentConfirm"> 确定添加</el-button>
</el-form-item>
</el-col>
</el-row>
@ -155,23 +155,22 @@
ref="equipmentTable"
:row-key="(row) => row.devId"
>
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column width="55" align="center" type="selection" />
<el-table-column width="160" show-overflow-tooltip prop="propertyUnit" label="公司名称" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="name" label="装备名称" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="specificationModel" label="装备型号" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="code" label="装备编号" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="unit" label="计数单位" align="center" />
<el-table-column label="序号" type="index" align="center" width="55"/>
<el-table-column width="55" align="center" type="selection"/>
<el-table-column width="160" show-overflow-tooltip prop="propertyUnit" label="公司名称" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="name" label="装备名称" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="specificationModel" label="装备型号" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="code" label="装备编号" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="unit" label="计数单位" align="center"/>
<el-table-column align="center" show-overflow-tooltip prop="status" label="状态">
<template slot-scope="scope">
<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>
<el-tag v-if="scope.row.status == 5" size="mini"> 维修 </el-tag>
<el-tag v-if="scope.row.status == 2" size="mini">自用</el-tag>
<el-tag v-if="scope.row.status == 3" size="mini"> 共享</el-tag>
</template>
</el-table-column>
<el-table-column width="160" show-overflow-tooltip prop="propertyUnit" label="产权单位" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="originalValue" 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="propertyUnit" label="产权单位" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="originalValue" label="资产原值(元)" align="center"/>
<el-table-column width="160" show-overflow-tooltip prop="productDate" label="出厂日期" align="center"/>
<el-table-column
width="160"
show-overflow-tooltip
@ -179,7 +178,7 @@
label="最大使用年限"
align="center"
/>
<el-table-column width="160" show-overflow-tooltip prop="usingProject" label="使用项目" align="center" />
<el-table-column width="160" show-overflow-tooltip prop="usingProject" label="使用项目" align="center"/>
<el-table-column
width="160"
show-overflow-tooltip
@ -187,7 +186,7 @@
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">
<!-- 特征项列 -->
<el-table-column :key="`item-${item}`" align="center" show-overflow-tooltip :label="`特征项${item}`">
@ -230,7 +229,7 @@ import {
getMaxFeatureAPI,
getUseProjectListAPI,
getVoltageListAPI,
addProjectOutAPI,
addProjectOutAPI
} from '@/api/EquipmentLedger/equ-out'
import { getDeviceListAPI } from '@/api/EquipmentLedger/index.js'
import { deptTreeSelect } from '@/api/system/user'
@ -257,7 +256,7 @@ export default {
proCity: '', //
proCounty: '', // /
proLocation: '', //
propertyUnitId: '', // ID
propertyUnitId: '' // ID
},
//
outFormRules: {
@ -269,7 +268,7 @@ export default {
proProvince: [{ required: true, message: '请选择项目所在省', trigger: 'change' }],
proCity: [{ required: true, message: '请选择项目所在市', trigger: 'change' }],
proCounty: [{ required: true, message: '请选择项目所在区/县', trigger: 'change' }],
proLocation: [{ required: true, message: '请选择详细地址', trigger: 'change' }],
proLocation: [{ required: true, message: '请选择详细地址', trigger: 'change' }]
},
equipmentList: [],
propertyUnitList: [], //
@ -286,7 +285,7 @@ export default {
devName: '',
status: '2',
companyId: '',
proId: '',
proId: ''
},
//
addEquipmentList: [],
@ -295,7 +294,7 @@ export default {
useProjectList: [], // 使
voltageList: [], //
proTypeName: '', //
voltageLevel: '',
voltageLevel: ''
}
},
created() {
@ -394,7 +393,7 @@ export default {
devName: '',
status: '2',
companyId: '',
proId: this.addEquipmentQueryParams.proId || '', // ID
proId: this.addEquipmentQueryParams.proId || '' // ID
}
this.getSelectEquipmentList()
},
@ -432,7 +431,7 @@ export default {
return
}
this.$refs.outFormRef.validate(async (valid) => {
this.$refs.outFormRef.validate(async(valid) => {
if (valid) {
if (this.selectedEquipment.length === 0) {
this.$modal.msgError('请至少添加一个装备')
@ -445,7 +444,7 @@ export default {
return {
devId: item.maId,
useTime: item.useTime,
changeStatus: item.changeStatus,
changeStatus: item.changeStatus
}
})
@ -457,7 +456,7 @@ export default {
if (res.code === 200) {
this.$modal.msgSuccess('状态变更成功')
this.$router.push({
path: '/equipment/equipment-ledger',
path: '/equipment/equipment-ledger'
})
} else {
this.$modal.msgError(res.msg)
@ -514,7 +513,7 @@ export default {
this.currentDialogSelected = selection.map((item) => ({
...item,
useTime: '',
validationError: {},
validationError: {}
}))
// ID
@ -533,14 +532,14 @@ export default {
//
const newItems = this.currentDialogSelected.filter(
(newItem) => !this.selectedEquipment.some((existing) => existing.devId === newItem.devId),
(newItem) => !this.selectedEquipment.some((existing) => existing.devId === newItem.devId)
)
if (newItems.length > 0) {
this.selectedEquipment = [...this.selectedEquipment, ...newItems]
this.$modal.msgSuccess('成功添加 ' + newItems.length + ' 个装备')
this.selectedEquipment.forEach((item) => {
item.changeStatus = '1'
this.$set(item, 'changeStatus', '1');
})
} else {
this.$modal.msgError('所选装备已添加')
@ -593,8 +592,8 @@ export default {
//
onHandleSubmit() {
this.submitForm()
},
},
}
}
}
</script>

View File

@ -12,7 +12,7 @@
@submit.native.prevent
style="width: 100%"
>
<el-form-item prop="name" style="margin-bottom: unset">
<el-form-item prop="name" style="margin-bottom: unset">
<el-input
v-model="treeSearchKey"
placeholder="搜索"
@ -420,11 +420,11 @@
<el-tag v-if="row.upDownStatus == 0" size="mini" type="danger">下架</el-tag>
</template>
<template v-slot="{ row }" v-else-if="item.prop == 'status'">
<el-tag v-if="row.status == 1" size="mini">在库</el-tag>
<el-tag v-if="row.status == 1" type="success" size="mini">在库</el-tag>
<el-tag v-if="row.status == 2" size="mini">自用</el-tag>
<el-tag v-if="row.status == 3" size="mini">共享</el-tag>
<el-tag v-if="row.status == 4" size="mini" type="info">退役</el-tag>
<el-tag v-if="row.status == 5" size="mini" type="danger">维修</el-tag>
<el-tag v-if="row.status == 4" size="mini" type="danger">退役</el-tag>
<el-tag v-if="row.status == 5" size="mini" type="warning" >维修</el-tag>
</template>
<template v-slot="{ row }" v-else-if="item.prop == 'appearanceImages'">
<span style="color: #00a288; cursor: pointer" @click="handleView(row, 1)">查看</span>
@ -803,9 +803,9 @@ 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',
@ -836,14 +836,14 @@ export default {
featureItem: undefined, //
featureValue: undefined, //
pageNum: 1,
pageSize: 10,
pageSize: 10
},
//
queryRules: {},
//
defaultProps: {
children: 'children',
label: 'name',
label: 'name'
},
treeData: [],
defaultExpandedKeys: [], // key
@ -854,51 +854,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,
@ -942,18 +942,18 @@ export default {
personPhone: '',
nextCheckTime: '',
brand: '',
propertyVoList: [],
propertyVoList: []
},
//
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,
dialogTitle: '',
dialogList: [],
dialogList: []
}
},
methods: {
@ -1017,7 +1017,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)
}
@ -1032,7 +1032,7 @@ export default {
list.forEach((item) => {
map[item.value] = {
value: item.value.toString(),
label: item.label,
label: item.label
}
})
@ -1132,7 +1132,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) {
@ -1140,20 +1140,19 @@ 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] : []
} 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
}
},
@ -1161,13 +1160,13 @@ export default {
* 收集第一级和第二级节点的ID第三级默认不展开
*/
collectFirstAndSecondLevelKeys(nodes) {
if (!nodes || !nodes.length) return;
if (!nodes || !nodes.length) return
nodes.forEach(firstLevelNode => {
//
if (firstLevelNode.id) {
this.defaultExpandedKeys.push(firstLevelNode.id);
console.log(`展开第一级节点: ${firstLevelNode.name}, ID: ${firstLevelNode.id}`);
this.defaultExpandedKeys.push(firstLevelNode.id)
console.log(`展开第一级节点: ${firstLevelNode.name}, ID: ${firstLevelNode.id}`)
}
//
@ -1175,16 +1174,15 @@ export default {
//
firstLevelNode.children.forEach(secondLevelNode => {
if (secondLevelNode.id) {
this.defaultExpandedKeys.push(secondLevelNode.id);
console.log(`展开第二级节点: ${secondLevelNode.name}, ID: ${secondLevelNode.id}`);
this.defaultExpandedKeys.push(secondLevelNode.id)
console.log(`展开第二级节点: ${secondLevelNode.name}, ID: ${secondLevelNode.id}`)
//
}
});
})
}
});
})
},
/**
* 左侧树查询匹配节点显示自身及下一级但默认只显示到第二级
*/
@ -1192,41 +1190,41 @@ export default {
if (!this.treeSearchKey.trim) return
try {
// 1.
const searchKey = this.treeSearchKey ? this.treeSearchKey.trim() : '';
const searchKey = this.treeSearchKey ? this.treeSearchKey.trim() : ''
//
if (!searchKey) {
await this.resetTreeSearch();
return;
await this.resetTreeSearch()
return
}
// 2.
this.treeLoading = true;
const res = await getDeviceTreeAPI();
const originalTreeData = res.data ? [res.data] : [];
this.treeLoading = true
const res = await getDeviceTreeAPI()
const originalTreeData = res.data ? [res.data] : []
// 3.
const filteredTreeData = this.filterTreeWithNextLevel(originalTreeData, searchKey);
const filteredTreeData = this.filterTreeWithNextLevel(originalTreeData, searchKey)
// 4. ID
const expandedIds = [];
this.collectMatchedNodeIds(filteredTreeData, searchKey, expandedIds);
const expandedIds = []
this.collectMatchedNodeIds(filteredTreeData, searchKey, expandedIds)
// 5.
this.treeData = filteredTreeData;
this.defaultExpandedKeys = expandedIds;
this.treeData = filteredTreeData
this.defaultExpandedKeys = expandedIds
// 6.
if (filteredTreeData.length === 0 || this.isTreeEmpty(filteredTreeData)) {
/* this.$message.info('未找到匹配的类型分支'); */
/* this.$message.info('未找到匹配的类型分支'); */
} else {
// this.$message.success(` ${expandedIds.length} `);
}
} catch (error) {
// this.$message.error('' + (error.message || ''));
console.error(error);
console.error(error)
} finally {
this.treeLoading = false;
this.treeLoading = false
}
},
@ -1234,36 +1232,36 @@ export default {
* 辅助方法筛选节点并包含下一级
*/
filterTreeWithNextLevel(treeData, key) {
if (!treeData || !treeData.length) return [];
if (!treeData || !treeData.length) return []
return treeData
.map(node => {
//
const newNode = {...node};
const newNode = { ...node }
const isNodeMatch = key ? node.name.includes(key) : true;
const isNodeMatch = key ? node.name.includes(key) : true
if (isNodeMatch) {
//
if (newNode.children && newNode.children.length) {
//
newNode.children = [...newNode.children];
newNode.children = [...newNode.children]
}
return newNode;
return newNode
} else {
//
if (newNode.children && newNode.children.length) {
const filteredChildren = this.filterTreeWithNextLevel(newNode.children, key);
const filteredChildren = this.filterTreeWithNextLevel(newNode.children, key)
if (filteredChildren.length > 0) {
newNode.children = filteredChildren;
return newNode;
newNode.children = filteredChildren
return newNode
}
}
return null;
return null
}
})
.filter(node => node !== null);
.filter(node => node !== null)
},
/**
@ -1273,42 +1271,41 @@ export default {
* @param {Array} expandedIds - 存储展开节点ID的数组
*/
collectMatchedNodeIds(treeData, key, expandedIds) {
if (!treeData || !treeData.length) return;
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.id) expandedIds.push(node.id)
}
//
if (node.children && node.children.length) {
this.collectMatchedNodeIds(node.children, key, expandedIds);
this.collectMatchedNodeIds(node.children, key, expandedIds)
}
});
})
},
/**
* 辅助方法检查树是否为空没有任何有效节点
*/
isTreeEmpty(treeData) {
if (!treeData || !treeData.length) return true;
if (!treeData || !treeData.length) return true
//
for (const node of treeData) {
if (node && node.id) {
return false; //
return false //
}
if (node.children && node.children.length) {
if (!this.isTreeEmpty(node.children)) {
return false; //
return false //
}
}
}
return true;
return true
},
/**
* 左侧树重置仅恢复树形原始状态不联动右侧列表
*/
@ -1319,18 +1316,18 @@ export default {
try {
// 1.
if (this.$refs.queryFormLeft) {
this.$refs.queryFormLeft.resetFields();
this.$refs.queryFormLeft.resetFields()
}
this.treeSearchKey = ''; //
this.queryParams.typeId = undefined; // ID
this.treeSearchKey = '' //
this.queryParams.typeId = undefined // ID
// 2.
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] : []
// ID
this.defaultExpandedKeys = [];
this.defaultExpandedKeys = []
//
// this.collectFirstAndSecondLevelKeys(this.treeData);
@ -1339,13 +1336,12 @@ export default {
// this.$message.success('');
} catch (error) {
// this.$message.error('' + (error.message || ''));
console.error(error);
console.error(error)
} finally {
this.treeLoading = false;
this.treeLoading = false
}
},
/**
* 获取右侧列表数据
*/
@ -1382,7 +1378,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 } })
},
/**
@ -1435,7 +1431,7 @@ export default {
personPhone: '',
nextCheckTime: '',
brand: '',
propertyVoList: [],
propertyVoList: []
}
},
@ -1455,7 +1451,7 @@ export default {
this.formData.propertyVoList.push({
propertyName: '',
propertyValue: '',
propertyValue: ''
})
},
@ -1468,7 +1464,7 @@ export default {
cancelButtonText: '取消',
type: 'warning',
center: true,
showCancelButton: this.formData.propertyVoList.length > 1, //
showCancelButton: this.formData.propertyVoList.length > 1 //
})
.then(() => {
this.formData.propertyVoList.splice(index, 1)
@ -1482,7 +1478,7 @@ export default {
* 提交编辑表单
*/
async submitEditForm() {
this.$refs.editForm.validate(async (valid) => {
this.$refs.editForm.validate(async(valid) => {
if (valid) {
try {
const res = await updateDeviceAPI(this.formData)
@ -1508,8 +1504,8 @@ export default {
this.$confirm('确定要删除该装备吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(async () => {
type: 'warning'
}).then(async() => {
try {
const res = await delDevice(row.maId)
if (res.code === 200) {
@ -1536,7 +1532,7 @@ export default {
try {
const res = await updateDeviceUpDownAPI({
devIds: this.selectedRows.map((item) => item.maId).join(','),
status: 1,
status: 1
})
this.selectedRows = []
@ -1564,7 +1560,7 @@ export default {
try {
const res = await updateDeviceUpDownAPI({
devIds: this.selectedRows.map((item) => item.maId).join(','),
status: 0,
status: 0
})
this.selectedRows = []
@ -1593,7 +1589,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
@ -1635,7 +1631,7 @@ export default {
handleFile(row) {
//
window.open(row.fileUrl, '_blank')
},
}
},
async created() {
@ -1648,14 +1644,12 @@ export default {
//
await this.getDeviceList()
this.initDefaultExpandedKeys()
},
}
}
</script>
<style scoped lang="scss">
.app-container {
padding: 20px;
@ -1964,13 +1958,13 @@ export default {
}
}
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
&.el-table--striped .el-table__body tr.el-table__row:hover > td.el-table__cell {
background-color: #CCF1E9 !important;
}
}
.el-col-1 {
width: 1.5% !important;
width: 1.5% !important;
}
</style>

View File

@ -70,7 +70,7 @@
<el-tag v-if="row.changeStatus == 5" size="mini" type="danger">维修</el-tag>
</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip prop="status" label="流转后状态">
<!-- <el-table-column align="center" show-overflow-tooltip prop="status" label="流转后状态">
<template slot-scope="{ row }">
<el-tag v-if="row.status == 1" size="mini">在库</el-tag>
<el-tag v-if="row.status == 2" size="mini">自用</el-tag>
@ -78,7 +78,7 @@
<el-tag v-if="row.status == 4" size="mini" type="info">退役</el-tag>
<el-tag v-if="row.status == 5" size="mini" type="danger">维修</el-tag>
</template>
</el-table-column>
</el-table-column>-->
<el-table-column align="center" show-overflow-tooltip prop="useUint" label="使用单位"/>
<el-table-column align="center" show-overflow-tooltip prop="proName" label="使用项目"/>
<el-table-column align="center" show-overflow-tooltip prop="proLocation" label="地址"/>

View File

@ -1,7 +1,7 @@
<template>
<!-- 装备流转记录 -->
<div class="app-container">
<el-form ref="queryForm" size="small" inline label-width="auto" :model="queryParams">
<el-card class="search-box">
<el-col :span="12">
@ -32,7 +32,7 @@
</el-col>
</el-card>
</el-form>
<el-card class="content-box">
<el-row>
@ -63,11 +63,10 @@
</el-table-column>-->
<el-table-column align="center" show-overflow-tooltip prop="changeStatus" label="流转后状态">
<template slot-scope="scope">
<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" size="mini">自用</el-tag>
<el-tag v-if="scope.row.status == 3" size="mini">
共享
</el-tag>
<el-tag v-if="scope.row.status == 5" size="mini"> 维修</el-tag>
</template>
</el-table-column>
<el-table-column align="center" show-overflow-tooltip prop="useUint" label="需求单位"/>
@ -100,7 +99,7 @@
<el-button size="mini" type="primary" @click="onHandlePrint">打印</el-button>
<el-button size="mini" type="primary" @click="onHandleClose">关闭</el-button>
</el-row>
<vue-easy-print ref="recordPrintRef" tableShow style="width: 100%">
<h2 style="text-align: center;font-size: 28px;">出库记录单</h2>
<el-row class="record-row">
@ -369,11 +368,11 @@ export default {
border-radius: 6px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
::v-deep .el-table {
border-radius: 6px;
overflow: hidden;
//
&.el-table--striped .el-table__body {
tr.el-table__row--striped td {
@ -397,11 +396,11 @@ export default {
.el-table__body {
tr {
transition: all 0.2s ease;
&:hover {
background-color: #f8f9fa;
}
td {
padding: 12px 8px;
font-size: 13px;
@ -413,12 +412,12 @@ export default {
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
background-color: #CCF1E9 !important;
}
//
&::before {
display: none;
}
&::after {
display: none;
}

View File

@ -10,119 +10,114 @@
label-width="auto" size="small"
>
<el-card class="search-box">
<el-row :gutter="20" type="flex">
<el-col :span="6">
<el-form-item label="装备编码" prop="deviceCode">
<el-input
v-model.trim="searchParams.deviceCode"
placeholder="请输入装备编码"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6" >
<el-form-item label="质检次数" prop="minNum">
<el-input
v-model="searchParams.minNum"
placeholder="质检次数"
inputmode="numeric"
size="small"
style="width: 100px"
/> -
<el-input
v-model.trim="searchParams.maxNum"
placeholder="质检次数"
inputmode="numeric"
size="small"
style="width: 100px"
/>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="质检日期" prop="leaseStatus">
<el-date-picker
v-model="qcTime"
type="daterange"
placeholder="最新质检日期"
range-separator="-"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="更新日期" prop="createTime">
<el-date-picker
v-model="createTime"
type="daterange"
placeholder="更新日期"
range-separator="-"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align: right;">
<el-button type="primary" icon="el-icon-search" size="mini" class="primary-lease" @click="onSearch">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" class="primary-lease" @click="onReset">重置</el-button>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="5">
<el-form-item label="装备编码" prop="deviceCode">
<el-input
v-model.trim="searchParams.deviceCode"
placeholder="请输入装备编码"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="质检日期" prop="leaseStatus">
<el-date-picker
v-model="qcTime"
type="daterange"
placeholder="维保日期"
range-separator="-"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="更新日期" prop="createTime">
<el-date-picker
v-model="createTime"
type="daterange"
placeholder="更新日期"
range-separator="-"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align: right;">
<el-button type="primary" icon="el-icon-search" size="mini" class="primary-lease" @click="onSearch">查询
</el-button>
<el-button icon="el-icon-refresh" size="mini" class="primary-lease" @click="onReset">重置</el-button>
</el-col>
</el-row>
</el-card>
</el-form>
<el-card class="content-box">
<div class="table-container">
<!-- 维保列表表格 -->
<el-table
:data="qualityLis"
border
stripe
show-overflow-tooltip
>
<el-table-column label="序号" type="index" align="center" width="80"/>
<el-table-column prop="deviceCode" label="装备编码" align="center"/>
<el-table-column prop="deviceName" label="装备名称" align="center"/>
<el-table-column prop="qcTime" label="最新质检日期" align="center"/>
<el-table-column prop="createBy" label="创建人" align="center" width="120"/>
<el-table-column prop="createTime" label="上传时间" align="center"/>
<el-table-column prop="updateTime" label="更新时间" align="center"/>
<el-table-column label="操作" align="center" width="280">
<template slot-scope="{ row }">
<el-button
size="mini"
type="primary"
class="primary-lease"
@click="handleOpenAddDialog(row)"
>
新建
</el-button>
<el-button
size="mini"
type="primary"
class="primary-lease"
@click="handleOpenDetailDialog(row)"
>
装备质检记录
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<!-- 分页组件 -->
<pagination
:total="total"
:page.sync="searchParams.pageNum"
:limit.sync="searchParams.pageSize"
@pagination="getLeaseListData"
/>
</div>
</el-card>
<!-- 维保列表表格 -->
<el-table
:data="qualityLis"
border
stripe
show-overflow-tooltip
>
<el-table-column label="序号" type="index" align="center" width="80"/>
<el-table-column prop="deviceName" label="装备名称" align="center"/>
<el-table-column prop="itemTypeModel" label="装备型号" align="center"/>
<el-table-column prop="deviceCode" label="装备编码" align="center"/>
<el-table-column prop="createBy" label="维保人" align="center" width="120"/>
<el-table-column prop="nextCheckTime" label="下次维保日期" align="center"/>
<el-table-column prop="phonenumber" label="维保人联系方式" align="center"/>
<el-table-column prop="updateTime" label="更新时间" align="center"/>
<el-table-column prop="alert" label="维保告警" align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.alert == '正常'" size="mini">正常</el-tag>
<el-tag v-if="scope.row.alert == '已超期'" type="danger" size="mini">
已超期
</el-tag>
<el-tag v-if="scope.row.alert == '一月内到期'" type="warning" size="mini">
一月内维保到期
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="280">
<template slot-scope="{ row }">
<el-button
size="mini"
type="primary"
class="primary-lease"
@click="handleOpenAddDialog(row)"
>
新建
</el-button>
<el-button
size="mini"
type="primary"
class="primary-lease"
@click="handleOpenDetailDialog(row)"
>
装备质检记录
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<!-- 分页组件 -->
<pagination
:total="total"
:page.sync="searchParams.pageNum"
:limit.sync="searchParams.pageSize"
@pagination="getLeaseListData"
/>
</div>
</el-card>
<!-- 新增/详情对话框 -->
<el-dialog
:title="dialogTitle"
@ -189,20 +184,20 @@
<el-upload
:action="uploadUrl"
:headers="{ Authorization: getToken() }"
:file-list="fileList"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:on-remove="handleRemove"
:before-upload="beforeUpload"
:limit="1"
:on-exceed="handleExceed"
accept=".jpg,.png,.pdf,.doc,.docx"
list-type="picture-card"
:file-list="fileList"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:on-remove="handleRemove"
:before-upload="beforeUpload"
:limit="1"
:on-exceed="handleExceed"
accept=".jpg,.png,.pdf,.doc,.docx"
list-type="picture-card"
>
<i class="el-icon-plus" style="font-size: 48px; color: #aaa;"></i>
<div slot="tip" class="el-upload__tip">
支持格式.jpg.png.pdf.doc.docx 单个文件大小不能超过10M
</div>
<i class="el-icon-plus" style="font-size: 48px; color: #aaa;"></i>
<div slot="tip" class="el-upload__tip">
支持格式.jpg.png.pdf.doc.docx 单个文件大小不能超过10M
</div>
</el-upload>
</el-form-item>
</el-col>
@ -272,7 +267,9 @@
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" icon="el-icon-search" class="primary-lease" @click="getLeaseListDataInDialog">查询</el-button>
<el-button type="primary" icon="el-icon-search" class="primary-lease" @click="getLeaseListDataInDialog">
查询
</el-button>
<el-button icon="el-icon-refresh" class="primary-lease" @click="onResetInDialog">重置</el-button>
</el-form-item>
</el-col>
@ -425,7 +422,7 @@ export default {
qcUser: '',
qcTime: '',
nextCheckTime: '',
fileInfoList: [], //
fileInfoList: [] //
},
//
@ -562,7 +559,7 @@ export default {
qcUser: '',
qcTime: '',
nextCheckTime: '',
fileInfoList: [],
fileInfoList: []
}
this.fileList = []
this.warningDays = row.maintenanceAlarmDay
@ -921,7 +918,7 @@ export default {
padding-top: 6px;
margin-top: auto;
::v-deep .pagination-container {
::v-deep .pagination-container {
padding: 0px 20px !important;
margin-bottom: 30px;
}
@ -946,20 +943,21 @@ export default {
}
}
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
&.el-table--striped .el-table__body tr.el-table__row:hover > td.el-table__cell {
background-color: #CCF1E9 !important;
}
}
}
.dialog-table {
border-radius: 6px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
::v-deep .el-table {
border-radius: 6px;
overflow: hidden;
//
&.el-table--striped .el-table__body {
tr.el-table__row--striped td {
@ -983,11 +981,11 @@ export default {
.el-table__body {
tr {
transition: all 0.2s ease;
&:hover {
background-color: #f8f9fa;
}
td {
padding: 12px 8px;
font-size: 13px;
@ -996,15 +994,15 @@ export default {
}
}
&.el-table--striped .el-table__body tr.el-table__row:hover>td.el-table__cell {
&.el-table--striped .el-table__body tr.el-table__row:hover > td.el-table__cell {
background-color: #CCF1E9 !important;
}
//
&::before {
display: none;
}
&::after {
display: none;
}
@ -1012,27 +1010,27 @@ export default {
}
::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;
//
&.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;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ export default {
console.log('🚀 ~ mounted:', window.location)
this.iframeSrc =
process.env.NODE_ENV === 'production'
? 'http://192.168.0.14:19190/iws/mall-view/equipList'
: 'http://localhost:8102/iws/mall-view/equipList'
? ' http://127.0.0.1:8108/iws/mall-view/equipList'
: 'http://127.0.0.1:8108/iws/mall-view/equipList'
console.log('🚀 ~ this.iframeSrc:', this.iframeSrc)
},
}