zhaowei
2025-07-03 bf2e77248f05798c3f2904fe24416bb75c9e6476
src/views/eam/equipment/EamEquipmentLedger.vue
@@ -11,13 +11,13 @@
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="设备编号">
              <a-input placeholder="请输入设备编号" v-model="queryParam.equipmentCode"></a-input>
            <a-form-item label="统一编码">
              <a-input placeholder="请输入统一编码模糊查询" v-model="queryParam.equipmentCode"></a-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="设备名称">
              <a-input placeholder="请输入设备名称" v-model="queryParam.equipmentName"></a-input>
              <a-input placeholder="请输入设备名称模糊查询" v-model="queryParam.equipmentName"></a-input>
            </a-form-item>
          </a-col>
          <template v-if="toggleSearchStatus">
@@ -29,17 +29,19 @@
            </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="使用部门">
                <a-tree-select v-model="queryParam.orgId" style="width: 100%" :tree-data="treeDataAlias" show-search
                <a-tree-select v-model="queryParam.factoryOrgCode" style="width: 100%" :tree-data="productionTreeData"
                               show-search :replaceFields="{key:'orgCode',value:'orgCode'}"
                               treeNodeFilterProp="title" searchPlaceholder="请输入关键字搜索"
                               :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择使用部门"
                               allow-clear tree-default-expand-all
                >
                               allow-clear tree-default-expand-all>
                </a-tree-select>
              </a-form-item>
            </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="维修班组">
                <a-tree-select v-model="queryParam.orgId" style="width: 100%" :tree-data="treeDataAlias"
                <a-tree-select v-model="queryParam.repairDepartOrgCode" style="width: 100%"
                               show-search :tree-data="repairDepartTreeData" treeNodeFilterProp="title"
                               :replaceFields="{key:'orgCode',value:'orgCode'}" searchPlaceholder="请输入关键字搜索"
                               :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="请选择维修班组"
                               allow-clear tree-default-expand-all>
                </a-tree-select>
@@ -102,10 +104,35 @@
        :scroll="{ x: 'max-content' }"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        @change="handleTableChange"
        :customRow="customTableRow"
      >
        <!--统一编码-->
        <template slot="equipmentCode" slot-scope="text">
          <a href="#" @click="handleDetail(record)" style="display: inline-block;height: 100%">{{text}}</a>
        </template>
        <!--使用部门-->
        <template slot="factoryOrgCode" slot-scope="text,record">
          {{[record.gsfactoryOrgCode_dictText,record.zxfactoryOrgCode_dictText,record.gqfactoryOrgCode_dictText,record.factoryOrgCode_dictText].filter(item=>item).join('/')}}
        </template>
        <!--安装位置-->
        <template slot="installationPosition" slot-scope="text">
          <j-ellipsis :value="text" :length="5"/>
        </template>
        <!--操作系统-->
        <template slot="operationSystem" slot-scope="text">
          <a-switch checked-children="是" un-checked-children="否" :checked="Boolean(+text)" disabled/>
        </template>
        <!--操作系统-->
        <template slot="fireExtinguisher" slot-scope="text">
          <a-switch checked-children="是" un-checked-children="否" :checked="Boolean(+text)" disabled/>
        </template>
        <!--资产制造商-->
        <template slot="manufacturingEnterprise" slot-scope="text">
          <j-ellipsis :value="text" :length="8"/>
        </template>
        <span slot="action" slot-scope="text, record">
@@ -162,7 +189,8 @@
    <!--</a-tabs>-->
    <!-- 表单区域 -->
    <eamEquipment-modal ref="modalForm" @ok="modalFormOk" :treeDataAlias="treeDataAlias"/>
    <eamEquipment-modal ref="modalForm" @ok="modalFormOk" :productionTreeData="productionTreeData"
                        :repairDepartTreeData="repairDepartTreeData"/>
    <!--履历弹窗-->
    <resume-drawer ref="resumeDrawerRef" :currentTableRowRecord="currentTableRowRecord"/>
  </a-card>
@@ -217,14 +245,12 @@
          {
            title: '关键设备标识',
            align: 'center',
            width: 150,
            dataIndex: 'equipmentImportance',
            fixed: 'left'
          },
          {
            title: '统一编码',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentCode',
            scopedSlots: { customRender: 'equipmentCode' },
            ellipsis: true,
@@ -241,174 +267,152 @@
          {
            title: '使用部门',
            align: 'center',
            dataIndex: 'factoryOrgCode'
            dataIndex: 'factoryOrgCode',
            scopedSlots: { customRender: 'factoryOrgCode' }
          },
          {
            title: '所属分类',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentCategory'
            dataIndex: 'equipmentCategory_dictText'
          },
          {
            title: '保养状态',
            align: 'center',
            width: 100,
            dataIndex: 'maintenanceStatus_dicText'
            dataIndex: 'maintenanceStatus_dictText'
          },
          {
            title: '维修状态',
            align: 'center',
            width: 100,
            dataIndex: 'repairStatus_dicText'
            dataIndex: 'repairStatus_dictText'
          },
          {
            title: '技术状态',
            align: 'center',
            width: 100,
            dataIndex: 'technologyStatus_dicText'
            dataIndex: 'technologyStatus_dictText'
          },
          {
            title: 'ABC标识',
            align: 'center',
            width: 100,
            dataIndex: 'abcFlag'
          },
          {
            title: '维修班组',
            align: 'center',
            width: 100,
            dataIndex: 'repairDepartOrgCode'
          },
          {
            title: '安全配置',
            align: 'center',
            width: 100,
            dataIndex: 'securityConfiguration'
          },
          {
            title: '冷却系统',
            align: 'center',
            width: 100,
            dataIndex: 'coolSystem'
          },
          {
            title: '灭火器',
            align: 'center',
            width: 100,
            dataIndex: 'fireExtinguisher'
            dataIndex: 'fireExtinguisher',
            scopedSlots: { customRender: 'fireExtinguisher' }
          },
          {
            title: '灭火器有效期',
            align: 'center',
            width: 150,
            dataIndex: 'fireExtinguisherExpirationDate'
          },
          {
            title: '操作系统',
            align: 'center',
            width: 100,
            dataIndex: 'operationSystem'
            dataIndex: 'operationSystem',
            scopedSlots: { customRender: 'operationSystem' }
          },
          {
            title: '系统',
            align: 'center',
            width: 100,
            dataIndex: 'system'
          },
          {
            title: '设备端口',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentPort'
          },
          {
            title: '坐标数量',
            align: 'center',
            width: 100,
            dataIndex: 'coordinateNum'
          },
          {
            title: '重量',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentWeight'
          },
          {
            title: '重量计量单位',
            align: 'center',
            width: 150,
            dataIndex: 'weightUnit'
          },
          {
            title: '功能位置',
            align: 'center',
            width: 100,
            dataIndex: 'functionalLocation'
          },
          {
            title: '安装位置',
            align: 'center',
            width: 100,
            dataIndex: 'installationPosition'
            dataIndex: 'installationPosition',
            scopedSlots: { customRender: 'installationPosition' }
          },
          {
            title: '出厂日期',
            align: 'center',
            width: 100,
            dataIndex: 'leaveFactoryDate'
          },
          {
            title: '立项卡号',
            align: 'center',
            width: 100,
            dataIndex: 'cardNumber'
          },
          {
            title: '资金来源',
            align: 'center',
            width: 100,
            dataIndex: 'fundingSource'
          },
          {
            title: '验收日期',
            align: 'center',
            width: 100,
            dataIndex: 'acceptanceCheckDate'
          },
          {
            title: '出厂编号',
            align: 'center',
            width: 100,
            dataIndex: 'factoryNumber'
          },
          {
            title: '资产制造商',
            align: 'center',
            width: 100,
            dataIndex: 'manufacturingEnterprise'
            dataIndex: 'manufacturingEnterprise',
            scopedSlots: { customRender: 'manufacturingEnterprise' },
            ellipsis: true
          },
          {
            title: '资产来源国家',
            align: 'center',
            width: 150,
            dataIndex: 'originCountry'
          },
          {
            title: '型号',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentModel'
          },
          {
            title: '设备规格',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentSpecification'
          },
          {
            title: '总功率',
            align: 'center',
            width: 100,
            dataIndex: 'equipmentPower'
          },
          {
@@ -424,7 +428,7 @@
          {
            title: '资产状态',
            align: 'center',
            dataIndex: 'assetStatus'
            dataIndex: 'assetStatus_dictText'
          },
          {
            title: '本次三保日期',
@@ -472,16 +476,12 @@
          exportXlsUrl: 'eam/equipment/exportXls',
          importExcelUrl: 'eam/equipment/importExcel',
          getProductionTreeList: '/eam/BaseFactory/queryTreeList',
          repairDepartTreeList: '/eam/eamBaseRepairDepart/queryTreeList',
          templateXlsDownloadUrl: '导入模板/设备台账导入模板_v1.1.xlsx'
        },
        treeData: [],
        printedRows: [],
        activeTabKey: 1,
        appHomeUrl: '',
        currentTableRowRecord: {},
        isOpenProcess: false,
        isOpenPrecision: false,
        treeDataAlias: []
        productionTreeData: [],
        repairDepartTreeData: []
      }
    },
    computed: {
@@ -490,30 +490,38 @@
      }
    },
    created() {
      this.loadAllProductionTree()
      this.loadAppHomeUrlConfigValue()
      this.getProductionTreeDataByApi()
      this.getRepairDepartTreeDataByApi()
    },
    methods: {
      loadAllProductionTree() {
        //加载车间选择树
        getAction(this.url.getProductionTreeList).then(res => {
          if (res.success) {
            this.treeData = [...res.result]
            this.treeDataAlias = this.deepCopyAndModify(res.result)
          } else {
            this.$message.warning(res.message)
          }
        })
      // 获取使用部门树
      getProductionTreeDataByApi() {
        getAction(this.url.getProductionTreeList)
          .then(res => {
            if (res.success) {
              this.productionTreeData = res.result
            } else {
              this.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
      },
      /**
       * 开启铭牌弹窗
       * @param recordArray 表格行信息集合
       */
      handleOpenNameplateModal(recordArray) {
        this.printedRows = recordArray
        this.$refs.nameplateModalRef.httpUrl = this.appHomeUrl
        this.$refs.nameplateModalRef.visible = true
      // 获取维修班组树
      getRepairDepartTreeDataByApi() {
        getAction(this.url.repairDepartTreeList)
          .then(res => {
            if (res.success) {
              this.repairDepartTreeData = res.result
            } else {
              this.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
      },
      /**
@@ -528,118 +536,8 @@
        this.$nextTick(() => this.$refs.resumeDrawerRef.getEquipmentResumeByApi())
      },
      /**
       * 自定义设备台账表格行
       * @param record 表格行信息
       * @returns {{style: {cursor: string}, on: {click: *}}} 样式对象与事件方法
       */
      customTableRow(record) {
        return {
          style: {
            cursor: 'pointer'
          },
          on: {
            click: () => {
              this.onSelectChange([record.id])
            }
          }
        }
      },
      /**
       * 页签改变时触发
       * @param activeTabKey 当前激活的页签key
       */
      handleTabChange(activeTabKey) {
        if (this.selectedRowKeys.length !== 1) return
        this.$nextTick(() => this.loadTabPaneTableData(this.selectedRowKeys[0]))
      },
      /**
       * 加载页签表格数据
       * @param id 设备台账行记录Id
       */
      loadTabPaneTableData(id) {
        this.$refs['tabPaneTableListRef' + this.activeTabKey].queryParam.equipmentId = id
        this.$refs['tabPaneTableListRef' + this.activeTabKey].loadData(1)
      },
      /**
       * 设备台账表格多选框状态改变时触发
       * @param selectedRowKeys 已选择的rowKey集合
       * @param selectionRows 当前分页下已选择的行信息集合
       */
      onSelectChange(selectedRowKeys, selectionRows) {
        this.selectedRowKeys = selectedRowKeys
        this.selectionRows = selectionRows
        this.$refs['tabPaneTableListRef' + this.activeTabKey].queryParam.equipmentId = null
        this.$refs['tabPaneTableListRef' + this.activeTabKey].dataSource = []
        this.$refs['tabPaneTableListRef' + this.activeTabKey].onClearSelected()
        if (selectedRowKeys.length === 1) {
          let row = this.dataSource.find(row => row.id === selectedRowKeys[0])
          if (row) {
            this.isOpenProcess = (row.processParametersFlag === '1')
            this.isOpenPrecision = (row.precisionParametersFlag === '1')
          } else {
            this.isOpenProcess = false
            this.isOpenPrecision = false
          }
          this.loadTabPaneTableData(selectedRowKeys[0])
        } else {
          this.isOpenProcess = false
          this.isOpenPrecision = false
        }
        //tab标签被销毁了,返回第一个tab
        if (!this.isOpenProcess && this.activeTabKey === 6) {
          this.activeTabKey = 1
        }
        if (!this.isOpenPrecision && this.activeTabKey === 7) {
          this.activeTabKey = 1
        }
      },
      handleTemplateXlsDownload() {
        templateXlsDownload(this.url.templateXlsDownloadUrl)
      },
      loadAppHomeUrlConfigValue() {
        let params = { settingKey: 'app_home_url' }
        getSystemConfigValue(params).then(res => {
          if (res.success) {
            this.appHomeUrl = res.result.settingValue
          }
        })
      },
      deepCopyAndModify(arr) {
        // 如果当前元素不是数组或对象,直接返回
        if (!Array.isArray(arr) && typeof arr !== 'object' || arr === null || arr.length === 0) {
          return arr
        }
        // 如果是数组,创建一个新数组并递归处理每个元素
        if (Array.isArray(arr)) {
          const newArray = []
          for (let i = 0; i < arr.length; i++) {
            newArray.push(this.deepCopyAndModify(arr[i]))
          }
          return newArray
        }
        // 如果是对象,创建一个新对象并递归处理每个属性
        const newObj = {}
        for (const key in arr) {
          if (arr.hasOwnProperty(key)) {
            if (key === 'selectable') {
              newObj[key] = true
            } else if (key === 'children') {
              newObj[key] = this.deepCopyAndModify(arr[key])
            } else {
              newObj[key] = arr[key]
            }
          }
        }
        return newObj
      }
    }
  }