<template> <div style="height: calc(100% - 44.5px);padding: 0px 10px 10px;box-sizing: border-box;" v-loading="loading"> <div class="hanson-bar"> <div style="float:right;overflow:hidden;"> <!-- <span style="width:20px;float:left;display:block;height:20px;cursor: pointer;" @click="changeAssetsFalg"> <i v-show="!onlyRead" class="el-icon-fa el-icon-fa-compass"></i> </span> --> <span>当前筛选条件下共{{page.total || '--'}}设备</span> </div> <el-select v-model="onlyRead" @change="getHeaderData(mess)" style="width:100px;margin-right:20px;vertical-align:bottom;"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> <el-select v-model="showType" @change="initTable" style="width:100px;margin-right:10px;vertical-align:bottom;"> <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> <!-- <el-button size="small" style='width: 80px;' @click="download" icon="iconfont icon-xiazai">下载</el-button> --> <el-button size="small" style='width: 80px;' @click="addDevice">添加设备</el-button> <el-button size="small" @click="Batch" v-show="!onlyRead" :disabled="!(tableData && tableData.length)">批量维护信息点</el-button> <el-button size="small" style='width: 80px;' @click="reset">刷新</el-button> <el-button size="small" style='width: 80px;' v-show="!onlyRead" @click="undo">撤销</el-button> </div> <!-- 二维码弹窗 --> <qrcode :dialog="myDialog" :qrcodeUrl="qrcodeUrl" :addBody="true" ref="qrcode"></qrcode> <!-- bim坐标弹框 --> <bimDialog :dialog="myDialog" :bimcodeobj="bimcodeobj" @closeBIM='closeBIM' :addBody="true" ref="bimdialog"></bimDialog> <!-- 型号弹窗 --> <firm :mess="{deviceId: deviceType.assetType}" :firmDataType="firmDataType" ref="firm" @changeFirm="firmChange" :dialog="myDialog" ></firm> <!-- 供应商合同弹窗 --> <supply-dialog ref="supply" @change="supplyChange" :id="id" :dialog="myDialog"/> <!-- 供应商弹窗 --> <supplier-dialog ref="supplier" :firmDataType="firmDataType" @changeSupplier="supplierChange" :dialog="myDialog"/> <guarantee-dialog :id="id" ref="guarantee" @change="guaranteeChange" :dialog="myDialog"/> <!-- 上传文件--> <upload-files-dialog :read="onlyRead ? true : false" ref="upload" @changeFile="fileChange" :keysArr="filesArr" :firmDataType="firmDataType" :information="information" :infoType="infoType" :dialog="myDialog" /> <!-- 上传图片--> <upload-img-dialog :read="onlyRead ? true : false" @changeFile="imgChange" :keysArr="imgsArr" :dialog="myDialog" :firmDataType="firmDataType" :information="information" :infoType="infoType" /> <!-- 维修商信息--> <maintainer-dialog @changeMaintainer="changeMaintainer" :firmDataType="firmDataType" ref="maintainer" :dialog="myDialog" /> <insurer-dialog @changeInsurer="changeInsurer" :firmDataType="firmDataType" ref="insurer" :dialog="myDialog"/> <pic-dialog :read="onlyRead ? true : false" :dialog="myDialog" :keysArr="picsArr" @change="changePics" :firmDataType="firmDataType" :information="information" :infoType="infoType" /> <div class=" middle_sty" style="height: 91%; text-align:center" v-show="!mess.deviceId && (!tableData || !tableData.length)"> <p> <i class="icon-wushuju iconfont"></i> 请选择设备族 </p> </div> <div class="center middle_sty" style="height: 91%" v-show="mess.deviceId && (!tableData || !tableData.length)"> <p> <i class="icon-wushuju iconfont"></i> 暂无数据 </p> </div> <div v-show="mess.deviceId && tableData && tableData.length" id="handsontable" ref="handsontable"></div> <div v-show="mess.deviceId && tableData && tableData.length" class="right"> <my-pagination @change="getTableData" :page="page" :key="pageKey"></my-pagination> </div> <details-dialog :iframeSrc="iframeSrc" v-if="myDialog.details" :dialog="myDialog"></details-dialog> <!-- 关联的系统 --> <system-type :device="mess" :curDevice="curDevice" :dialog="myDialog" :type="onlyRead?'read':'edit'" @change="changeSystemType" :list="systemList"></system-type> <!-- 关联资产 --> <change-rea @changeProperty="changeProperty" :dialog="myDialog" :category="deviceType"></change-rea> <look-pic :dialog="myDialog" :keysArr="picsArr"></look-pic> <!-- 不支持的输入方式 --> <el-dialog title="临时维护信息点" :visible.sync="myDialog.update" @close="handleCloseUpdate" width="670px"> <el-row> 该信息点未定义对应组件,现在维护数据不确定后续是否可用。如确实需要维护,请点击 <el-link @click="updateInputShow = true" type="primary" :underline="false">继续维护</el-link> 。 </el-row> <el-row style="margin-top:20px;" v-show="updateInputShow"> <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 8}" placeholder="请输入内容" v-model="updateInput"></el-input> </el-row> <span slot="footer" class="dialog-footer"> <el-button @click="myDialog.update = false">取 消</el-button> <el-button type="primary" @click="handleClickUpdate">确 认</el-button> </span> </el-dialog> <!-- 新增设备 --> <el-dialog title="确定新增设备的类型" :visible.sync="myDialog.addDevice" width="670px"> <el-row> <my-cascader ref="cascader" @change="changeAddType" :all="true"></my-cascader> </el-row> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="toAddDevice">下 一 步</el-button> </span> </el-dialog> <!-- 维护信息弹窗--> <batchDialog ref="batchDialogs" @code="fourVendors" :firmName="firmName" :allObject="allObject" :page="batchPage" :information="information" :newEnclosure="newEnclosure" @getAllData="getAllData" @multiples="multiples" @upDataDevice="upDataDevice" /> </div> </template> <script> import { BeatchQueryParam, deleteEquip, getDataDictionary, getEquipBelongs, getEquipTableCon, queryEquip, queryUpdate, updateEquip } from "@/api/scan/request"; import tools from "@/utils/scan/tools" import handsonUtils from "@/utils/hasontableUtils" import showTools from "@/utils/handsontable/notShow" import text from "@/utils/handsontable/mainText" import myCascader from "@/components/ledger/lib/cascader" import buildFloor from '@/utils/handsontable/buildFloorData' import qrcode from "@/components/ledger/lib/qrcode" import bimDialog from '@/components/ledger/lib/bimDialog' import firm from "@/components/dialogs/list/firm" import supplyDialog from "@/components/dialogs/list/supplyDialog" import supplierDialog from "@/components/dialogs/list/supplierDialog" import maintainerDialog from "@/components/dialogs/list/maintainerDialog" import insurerDialog from "@/components/dialogs/list/insurerDialog" import guaranteeDialog from "@/components/dialogs/list/guaranteeDialog" import uploadFilesDialog from "@/components/dialogs/list/filesDialog" import uploadImgDialog from "@/components/dialogs/list/uploadImgDialog" import picDialog from "@/components/dialogs/list/picDialog" import batchDialog from "../../dialogs/list/batchDialog"; import systemType from "@/components/dialogs/list/systemType" import myPagination from "@/components/ledger/lib/myPagination" import detailsDialog from "@/components/ledger/lib/detailsDia" import changeRea from "@/components/dialogs/changeRea" import {mapGetters} from "vuex" //图片查看 import lookPic from "@/components/ledger/lib/lookImages" import Handsontable from "handsontable-pro" import 'handsontable-pro/dist/handsontable.full.css' import lStorage from '@/utils/localStorage' //下拉插件 // import "@/assets/js/chosen.jquery.min"; // import "@/assets/js/handsontable-chosen-editor"; export default { props: ["myParam"], components: { qrcode, //二维码页面 firm, // supplyDialog, supplierDialog, guaranteeDialog, uploadFilesDialog, maintainerDialog, insurerDialog, uploadImgDialog, picDialog, myPagination, systemType, detailsDialog, changeRea, lookPic, myCascader, batchDialog, bimDialog }, created() { buildFloor.getData(this.buildFloorData) }, computed: { ...mapGetters("layout", ["projectId", "secret", "userId"]), showTypes() { return this.onlyRead ? [{value: "Visible", label: '只看采集信息'}, {value: "all", label: '全部'}] : [{value: "partInfo", label: '隐藏信息点'}, {value: "all", label: '全部'}, {value: "Visible", label: '只看采集信息'}] }, // batchDate() { // // return !(!this.onlyRead && this.copyMain) // return !(!this.onlyRead && this.page.total > 1) // }, batchDialogShow() { return this.$refs.batchDialogs.batchDialog } }, data() { return { options: [{ value: true, label: '只读模式' }, { value: false, label: '编辑模式' }], buildFloorData: [], //楼层数据 tableData: [], mess: {}, tableHeader: null, page: { size: 50, sizes: [10, 30, 50, 100, 150, 200], total: 0, currentPage: 1 }, pageKey: new Date().getTime(), batchPage: { size: 100, sizes: [100, 200,500,1000], total: 0, currentPage: 1 }, myDialog: { qrcode: false, //二维码弹窗 bimcode:false,//bim弹窗 firm: false, //厂商弹窗 supply: false, //选择供应合同 supplier: false, //供应商选择 guarantee: false, //选择保单 maintainer: false, //选择维修商 insurer: false, //选择保险公司 uploadFiles: false,//上传文件 uploadImgs: false,//上传单个图片 pic: false, //多个图片 addDevice: false,//添加设备 systemType: false,//关联系统 details: false,//详情页 changeRea: false,//关联资产 lookPic: false,//图片查看 update: false,//临时维护信息点 }, row: null, //被修改的row filesArr: [], //保存临时的文件key messKey: null, imgsArr: [], //临时保存的图片key数组 picsArr: [], //临时设备图片keys数组 systemList: [], //关联的系统 copyMain: null, iframeSrc: "", id: 0, onlyRead: true, showType: 'Visible', linkNameFalg: true, qrcodeUrl: "", //二维码图片地址 bimcodeobj:"",//BIM对象 loading: false, deviceType: {}, //族3位编码及名称 floorData: [], curDevice: '',//当前点击的设备id addData: {}, // showParts: false, inputMap: { flowBuild: { InputMode: 'D1', Editable:true, InfoPointCode:"flowBuild", InfoPointName:"建筑楼层", Path:"flowBuild" } }, //信息点和输入方式映射表 updateInputShow: false, //是否显示临时维护输入框 updateInfoPoint: '',//临时维护信息点 updateInput: '', //临时维护信息点值 firmName: '',//维护信息显示厂家名称 firmDataType: 'row', allObject: [], information: { archive: { Archive: [], //设备文档 name: '设备文档', code: 'LedgerParam.PhotoDoc.Archive', num: 14 }, checkReport: { CheckReport: [],//安装质检报告 name: '安装质检报告', code: 'LedgerParam.Siteinstall.CheckReport', num: 18 }, drawing: { Drawing: [],//设备图纸 name: '设备图纸', code: 'LedgerParam.PhotoDoc.Drawing', num: 13 }, installDrawing: { InstallDrawing: [],//安装图纸 name: '安装图纸', code: 'LedgerParam.Siteinstall.InstallDrawing', num: 16 }, installPic: { InstallPic: [],//安装照片 name: '安装照片', code: 'LedgerParam.Siteinstall.InstallPic', num: 17 }, insuranceFile: { InsuranceFile: [],//保险文件 name: '保险文件', code: 'LedgerParam.InsuranceDoc.InsuranceFile', num: 11 }, nameplate: { Nameplate: [],//设备铭牌照片 name: '设备铭牌照片', code: 'LedgerParam.PhotoDoc.Nameplate', num: 12 }, pic: { Pic: [],//设备照片 name: '设备照片', code: 'LedgerParam.PhotoDoc.Pic', num: 15 } }, infoType: '', newEnclosure:[] }; }, methods: { //获取表头 getHeaderData(code) { let tempParams = this.$route.params; if (!tempParams.used && tempParams.pageSize) { this.page.currentPage = tempParams.pageNo; this.page.size = tempParams.pageSize; this.onlyRead = tempParams.readOnly; tempParams.used = true; } else { this.page.currentPage = 1 } this.pageKey = new Date().getTime(); this.mess = code this.changeCader() if (this.mess.deviceId) { let params = { data: { Orders: "sort asc, InfoPointName desc", PageNumber: 1, PageSize: 1000 }, type: this.mess.deviceId }; getDataDictionary(params, res => { this.tableHeader = res.Content; console.log(this.tableHeader) this.tableHeader.forEach(item => { if (item.Path) { this.inputMap[item.Path] = item } }) this.getTableData() this.getAllData() // 信息维护 this.newEnclosure = res.Content.filter(i=>i.InputMode =='F2') }); } }, //关闭弹窗 closeBIM(){ this.myDialog.bimcode = false }, //获取主体数据 getTableData() { this.loading = true //type存在发送请求 if (!!this.mess.deviceId) { let param = { PageSize: this.page.size, Orders: "createTime desc,EquipID desc,EquipLocalID desc,EquipLocalName desc", PageNumber: this.page.currentPage, Filters: `category='${this.mess.deviceId}'` } if (this.mess.buildId == "noKnow") { param.Filters += `;buildingId isNull` } else if (this.mess.buildId && this.mess.buildId != "all") { param.Filters += `;buildingId='${this.mess.buildId}'` } if (this.mess.floorId == "noKnow") { param.Filters += `;floorId isNull` } else if (this.mess.floorId && this.mess.floorId != "all") { param.Filters += `;floorId='${this.mess.floorId}'` } getEquipTableCon(param, res => { this.loading = false; this.showParts = res.Message == "1"?true:false;// 判断是否显示包含的部件列 this.tableData = res.Content.map((item) => { if (item.hasOwnProperty("BuildingId") && item.hasOwnProperty("FloorId")) { item.flowBuild = item.BuildingId + "-" + item.FloorId } else if (item.hasOwnProperty("BuildingId") && !item.hasOwnProperty("FloorId")) { item.flowBuild = item.BuildingId } return item }); this.copyMain = tools.deepCopy(this.tableData); this.page.total = res.Total; if (this.tableData && this.tableData.length) { if (this.onlyRead) { this.getBatch(this.tableData) } this.initTable(); } }) } }, //获取所以主体数据---用于维护信息 getAllData() { if (!!this.mess.deviceId) { // 查询step2 let params = { "Cascade": [ { "Name": "property", "Projection": [ "Family", "EquipLocalName", "EquipLocalID", "EquipID", "CodeType" ] }, { "Name": "building", "Projection": [ "BuildLocalName", "BuildName", "BuildID" ] }, { "Name": "floor", "Projection": [ "FloorLocalName", "FloorName", "FloorID" ] } ], Filters: `category='${this.mess.deviceId}'`, PageSize: this.batchPage.size, Orders: "createTime desc, EquipID desc", PageNumber: this.batchPage.currentPage, "Projection": [ "BuildingId", "FloorId", "Category", "EquipLocalName", "EquipLocalID", "EquipID", "BIMID" ] }; if (this.mess.buildId == "noKnow") { params.Filters += `;buildingId isNull` } else if (this.mess.buildId && this.mess.buildId != "all") { params.Filters += `;buildingId='${this.mess.buildId}'` } if (this.mess.floorId == "noKnow") { params.Filters += `;floorId isNull` } else if (this.mess.floorId && this.mess.floorId != "all") { params.Filters += `;floorId='${this.mess.floorId}'` } queryEquip(params, res => { this.allObject = res.Content this.batchPage.total = res.Total }) } }, //获取动态参数 getBatch(data) { let param = { secret: this.secret, ProjId: this.projectId, data: { criterias: [] } } //一级遍历list this.tableHeader.map(head => { //如果一级标签为动态参数或者设定参数放入数据等待请求 if ( head.InputMode == "L" || head.InputMode == "L1" || head.InputMode == "L2" || head.InputMode == "M" ) { data.map(item => { let cur = tools.dataForKey(item, head.Path); if (cur) { param.data.criterias.push({ id: item.EquipID, code: head.InfoPointCode }); } }); } }) if (param.data.criterias.length) { BeatchQueryParam(param, res => { if (!this.onlyRead) { return false } this.tableData = data.map(item => { res.Content.map(child => { if (item.EquipID == child.id) { if (!!child.data || child.data == 0) { this.tableHeader.map(head => { if (head.InfoPointCode == child.code) { tools.setDataForKey(item, head.Path, child.data); } }); } else { this.tableHeader.map(head => { if (head.InfoPointCode == child.code) { tools.setDataForKey( item, head.Path, child.error ? child.value ? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据" ); } }); } } }) return item }) this.hot.loadData(this.tableData) }) } }, //修改资产 changeAssetsFalg() { if (this.linkNameFalg) { this.linkNameFalg = false } else { this.$confirm('<p>真的要在这里修改设备关联的资产么?</p><p>真的能通过列表信息找到想关联的资产么?</p><p>在这里修改关联的资产一定是因为之前关联错了要修改么?</p>', '提示', { dangerouslyUseHTMLString: true, confirmButtonText: '没错!我要改关联的资产', cancelButtonText: '我就点开看看', confirmButtonClass: 'cancelButtonClass', cancelButtonClass: 'cancelButtonClass' }).then(_ => { this.linkNameFalg = true }).catch(_ => { this.$message("取消") }) } }, //撤回 undo() { this.hot.undo(); }, //刷新-switch改变 reset() { this.getTableData(); }, //添加设备 addDevice() { this.myDialog.addDevice = true if (this.mess.deviceId) { this.$nextTick(() => { this.$refs.cascader.setValue(this.mess.deviceId) }) } }, //下一步 toAddDevice() { if (this.addData.deviceId) { this.$router.push({ path: "/ledger/deviceadd", query: this.addData }); } }, //选择设备类型-添加设备 changeAddType(val) { this.addData.deviceId = val.code; this.addData.name = val.facility; this.addData.showType = this.showType; }, //下载 download() { if (!this.onlyRead) { if (!!this.hot) { let fileName = this.mess.name + "-页数:" + this.page.currentPage + "-个数:" + this.tableData.length + "-总个数:" + this.page.total this.hot.getPlugin('exportFile').downloadFile("csv", { filename: fileName, columnHeaders: true, exportHiddenRows: true, exportHiddenColumns: true, rowHeaders: true }) } else { this.$message("请确定存在表格") } } else { this.$message("下载需在编辑状态下") } }, //格式化表头 formatHeaderData(list) { let arr = tools.copyArr(list) let data = showTools.headerTextFilter(arr, 'equipment', this.onlyRead, this.showType, true) if (this.showParts) { data.unshift("操作", "当前关联的资产", "所属系统实例", "包含的部件"); } else { data.unshift("操作", "当前关联的资产", "所属系统实例"); } if (this.showType == "all" && this.showParts) { data.splice(6, 0, "所属建筑楼层") } else if (this.showType == "all" && !this.showParts) { data.splice(5, 0, "所属建筑楼层") } return data; }, //格式化表内容 formatHeaderType(list) { let arr = tools.copyArr(list) let data = showTools.headerTypeFilter(arr, 'equipment', this.onlyRead, this.showType, true) if (this.showParts) { data.unshift( { data: "caozuo", renderer: tools.lookDetails, readOnly: true }, { data: "LinkEquipLocalName", readOnly: true, renderer: tools.LinkEquipLocalName }, { data: "LinkSystem", renderer: text.systemList, readOnly: true }, { data: "Count", readOnly: true, renderer: tools.lookDetails } ); } else { data.unshift( { data: "caozuo", renderer: tools.lookDetails, readOnly: true }, { data: "LinkEquipLocalName", readOnly: true, renderer: tools.LinkEquipLocalName }, { data: "LinkSystem", renderer: text.systemList, readOnly: true } ); } if (this.showType == "all" && this.showParts) { data.splice(6, 0, { data: "flowBuild", renderer: tools.customDropdownRenderer, editor: "chosen", chosenOptions: { data: this.buildFloorData }, readOnly: this.onlyRead }) } else if (this.showType == "all" && !this.showParts) { data.splice(5, 0, { data: "flowBuild", renderer: tools.customDropdownRenderer, editor: "chosen", chosenOptions: { data: this.buildFloorData }, readOnly: this.onlyRead }) } return data; }, //初始化插件 initTable() { var container = document.getElementById("handsontable"); let winHeight = document.documentElement.clientHeight; if (this.hot) { this.hot.destroy(); this.hot = null; } this.hot = new Handsontable(container, { data: this.tableData, fixedColumnsLeft: this.showParts?6:5, colHeaders: this.formatHeaderData(this.tableHeader), //表头文案 columns: this.formatHeaderType(this.tableHeader), //数据显示格式 filters: true, maxRows: this.tableData.length, height: winHeight - 335, columnSorting: true, //添加排序 sortIndicator: true, //添加排序 renderAllRows: true, // colWidths: 200, autoColumnSize: true, language: "zh-CN", manualColumnResize: true, manualColumnMove: true, dropdownMenu: [ "filter_by_condition", "filter_by_value", "filter_action_bar" ], contextMenu: this.onlyRead ? false : { items: { remove_row: { name: "删除选中设备" } } }, // 事件 afterChange: this.handleUpdataTable, //修改后 afterFilter: this.trimmedRows, //排序前 afterRemoveRow: this.handleDeleteTableRow, //右键删除 afterOnCellMouseDown: this.eventClick //鼠标点击 }); let pro = document.getElementById("hot-display-license-info"); if (!!pro) { pro.parentNode.removeChild(pro); } this.isLoading = false; }, //表格中的点击 eventClick(el, rowArr) { //点击的是表头 if (rowArr.row < 0) { return; } //被筛选过后的数组 let trimmedArr = this.trimmedRows(); //是否启用了排序 let isSort = this.hot.getPlugin("columnSorting").isSorted(); if (trimmedArr.length && isSort) { let sortArr = this.myHotArr.getPlugin("columnSorting").rowsMapper .__arrayMap; let infos = this.tableData[trimmedArr[sortArr[rowArr.row]]]; this.getInfors(infos, {row: sortArr[rowArr.row], col: rowArr.col}, el); } else if (isSort) { //排序后的数组 let sortArr = this.hot.getPlugin("columnSorting").rowsMapper.__arrayMap; let infos = this.tableData[sortArr[rowArr.row]]; this.getInfors(infos, {row: sortArr[rowArr.row], col: rowArr.col}, el); } else if (trimmedArr.length) { let infos = this.tableData[trimmedArr[rowArr.row]]; this.getInfors(infos, {row: trimmedArr[rowArr.row], col: rowArr.col}, el); } else { let infos = this.tableData[rowArr.row]; this.getInfors(infos, rowArr, el); } }, // 更新 handleUpdataTable(changeData, source) { if (!this.onlyRead && source != 'ObserveChanges.change') { if (changeData) { let trimmedArr = this.trimmedRows(); let param = handsonUtils.getParam(changeData, source, this.hot, trimmedArr); let data = []; for (let i = 0; i < param.length; i++) { data.push(param[i]); } //如果data中包含/且data长度为1,将其转换成. if (changeData.length == 1 && changeData[0][1].indexOf("/") > 0) { changeData[0][1] = changeData[0][1].split("/").join(".") } //存在data进行修改请求 if (data && data.length) { this.updateBusiness(data, changeData); } } } }, //删除设备 handleDeleteTableRow() { let params = tools.differenceArr(this.tableData, this.copyMain) let _this = this if (params.length < 1) { return } let param = [] params.map(item => { this.deleteCode = item.Category param.push({EquipID: item.EquipID}) }) this.$confirm("此操作将删除设备,是否继续?", "提示", { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.removeDevice(param) }).catch(() => { this.reset() this.$message("取消删除") }) }, // 删除设备 async removeDevice(param) { await deleteEquip(param, res => { this.$message.success("删除成功") this.$emit('close', {code: this.deleteCode}) // this.getTableData() }) }, // 更新 updateBusiness(data, change) { let param = { Content: [], Projection: [] }, keyList = []; //生成要修改字段列表 change.map(item => { let key = item[1].split(".")[0] if (key == "flowBuild" && keyList.indexOf(key) == -1) { keyList.push("BuildingId", "FloorId") param.Projection.push("BuildingId", "FloorId") } if (item[1] && keyList.indexOf(key) == -1 && item[1] != 'PropertyId') { keyList.push(key); } if (item[1] && item[3] == "" && param.Projection.indexOf(key) == -1 && item[1] != 'PropertyId') { param.Projection.push(key); } }); //生成对应修改数据 data.map((item, index) => { keyList.map(value => { if (value == "BuildingId") { let itemData = tools.dataForKey(item, "flowBuild") if (itemData == "") { tools.setDataForKey(item, "BuildingId", null) tools.setDataForKey(item, "FloorId", null) } else { let BuildingId = itemData.split("-")[0] let FloorId = itemData.split("-")[1] if (BuildingId && FloorId) { tools.setDataForKey(item, "BuildingId", BuildingId) tools.setDataForKey(item, "FloorId", FloorId) } else if (BuildingId && !FloorId) { tools.setDataForKey(item, "BuildingId", BuildingId) tools.setDataForKey(item, "FloorId", null) } } } else { let itemData = tools.dataForKey(item, value) tools.setDataForKey(item, value, itemData == "" ? null : itemData) } }); param.Content.push(item); }); updateEquip(param, res => { }); }, //修改设备类型 changeCader() { if (this.mess.deviceId) { let param = { data: { Filters: `EquipCode='${this.mess.deviceId}'`, PageNumber: 1, PageSize: 50 } } getEquipBelongs(param, res => { if (res.Content.length) { this.deviceType.assetType = res.Content[0].Family this.deviceType.assetName = res.Content[0].FamilyName } }) } }, // 接受维护信息传来的code,显示弹窗 fourVendors(code) { this.firmDataType = 'dialog' switch (code) { //品牌型号弹窗 case 'DPManufacturerID': // this.dataFirmType = 'dia' this.myDialog.firm = true; break; //供应商信息弹窗 case 'DPSupplierID': this.myDialog.supplier = true; break; //维修商信息弹窗 case 'DPMaintainerID': this.myDialog.maintainer = true; break; //保险公司信息 case 'DPInsurerID': this.myDialog.insurer = true; break; } }, forValue(arr, val) { let enclosure = [] arr && arr.length && arr.map(i => { if (i.Path == val) { enclosure = i.value } }) return enclosure }, multiples(val) { this.firmDataType = 'dialog' switch (val) { case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.PhotoDoc.Archive': //设备文档 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.Siteinstall.CheckReport': //安装质检报告 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.OperationMainte.MaintainManual': //维修保养手册 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.SupplyPurchase.ApproachingAcceptance': //进场验收单 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.SupplyPurchase.AcceptanceReport': //验收报告 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.PhotoDoc.OperationManual': //操作说明书 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.EquipManufactor.OriginalCertificate': //原厂证明 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.EquipManufactor.TestReport': //检测报告 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.PhotoDoc.ProductCertification': //产品合格证 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.Siteinstall.InstallInstruction': //安装说明书 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.PhotoDoc.Drawing': //设备图纸 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.Siteinstall.InstallDrawing': //安装图纸 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.SupplyPurchase.SupplierContract': //供应合同 this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val; this.myDialog.uploadFiles = true; break; case 'LedgerParam.Siteinstall.InstallPic': this.imgsArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val this.myDialog.uploadImgs = true; break; case 'LedgerParam.PhotoDoc.Nameplate': this.imgsArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val this.myDialog.uploadImgs = true; break; //设备照片 case 'LedgerParam.PhotoDoc.Pic': this.picsArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : []; this.infoType = val this.myDialog.pic = true; break; } }, getInfors(infos, row, el) { let val = this.hot.colToProp(row.col); let inputData = this.inputMap[val]; this.row = row.row; this.messKey = val; this.firmDataType = 'row' lStorage.set('screen_data', { path: this.$route.path, data: { equip: infos } }) switch (val) { //操作 case 'caozuo': // window.open(`http://adm.sagacloud.cn:8058/spread?id=${infos.EquipID}&pid=${this.projectId}&secret=${this.secret}`,"_blank") // this.$message("开发中...") this.$router.push({ path: "deviceDetails", query: { type: this.mess.deviceId, equipId: infos.EquipID, equipName: infos.EquipLocalName?infos.EquipLocalName:infos.EquipName?infos.EquipName:'', equipCode: infos.EquipLocalID?infos.EquipLocalID:'', data: this.tableData.map(item => { return { value: item.EquipID, label: item.EquipLocalName?item.EquipLocalName:item.EquipName?item.EquipName:'' } }) } }) return false //设备二维码图片 case 'EquipQRCode': this.qrcodeUrl = this.tableData[row.row].EquipQRCode; if (!!this.qrcodeUrl) { this.myDialog.qrcode = true; } else { this.$message("此设备没有设备二维码"); } return false //BIM模型中坐标 case 'BIMLocation': this.bimcodeobj = this.tableData[row.row]; if (Object.keys(this.bimcodeobj).length>0) { this.myDialog.bimcode = true; } else { this.$message("此设备没有BIM模型中坐标"); } return false //关联系统 case 'LinkSystem': this.curDevice = infos.EquipID; this.systemList = this.tableData[row.row].LinkSystem || []; this.myDialog.systemType = true; return false //关联资产 case 'LinkEquipLocalName': if (!this.onlyRead) { this.myDialog.changeRea = true; } return false //品牌型号弹窗 case 'DPManufacturerID': if (!this.onlyRead) { this.myDialog.firm = true; } return false //供应商信息弹窗 case 'DPSupplierID': if (!this.onlyRead) { this.myDialog.supplier = true; } return false //维修商信息弹窗 case 'DPMaintainerID': if (!this.onlyRead) { this.myDialog.maintainer = true; } return false //保险公司信息 case 'DPInsurerID': if (!this.onlyRead) { this.myDialog.insurer = true; } return false //供应合同编号 case 'LedgerParam.SupplyPurchase.SupplierContractID': if (!this.onlyRead) { let ContractIDflag = null; let DPSdata = this.tableData[row.row].DPSupplierID; if (DPSdata) { ContractIDflag = DPSdata.split("-")[0]; } if (!!ContractIDflag) { this.id = ContractIDflag; this.myDialog.supply = true; } else { this.$message("请先选择供应商"); } } return false //保险单号 case 'LedgerParam.InsuranceDoc.InsuranceNum': if (!this.onlyRead) { let DPInsurerIDflag = null; let DPIdata = this.tableData[row.row].DPInsurerID; if (DPIdata) { DPInsurerIDflag = DPIdata.split("-")[0]; } if (!!DPInsurerIDflag) { this.id = DPInsurerIDflag; this.myDialog.guarantee = true; } else { this.$message("请先选择保险商"); } } return false //保险文件--设备文档--安装质检报告 case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件 case 'LedgerParam.PhotoDoc.Archive': //设备文档 case 'LedgerParam.Siteinstall.CheckReport': //安装质检报告 case 'LedgerParam.OperationMainte.MaintainManual': //维修保养手册 case 'LedgerParam.SupplyPurchase.ApproachingAcceptance': //进场验收单 case 'LedgerParam.SupplyPurchase.AcceptanceReport': //验收报告 case 'LedgerParam.PhotoDoc.OperationManual': //操作说明书 case 'LedgerParam.EquipManufactor.OriginalCertificate': //原厂证明 case 'LedgerParam.EquipManufactor.TestReport': //检测报告 case 'LedgerParam.PhotoDoc.ProductCertification': //产品合格证 case 'LedgerParam.Siteinstall.InstallInstruction': //安装说明书 case 'LedgerParam.SupplyPurchase.SupplierContract': //供应合同 case 'LedgerParam.PhotoDoc.Drawing': //设备图纸 case 'LedgerParam.Siteinstall.InstallDrawing': //安装图纸 let IPSdata = tools.dataForKey(this.tableData[row.row], val); this.filesArr = IPSdata ? IPSdata : []; if (!this.onlyRead || this.filesArr.length) { this.myDialog.uploadFiles = true; } return false //安装照片--设备铭牌照片 case 'LedgerParam.Siteinstall.InstallPic': case 'LedgerParam.PhotoDoc.Nameplate': let SSPPdata = tools.dataForKey(this.tableData[row.row], val); this.imgsArr = SSPPdata ? SSPPdata : []; if (!this.onlyRead || this.imgsArr.length) { this.myDialog.uploadImgs = true; } return false //设备照片 case 'LedgerParam.PhotoDoc.Pic': let Pdata = tools.dataForKey(this.tableData[row.row], val); this.picsArr = Pdata ? Pdata : []; if (!this.onlyRead || this.picsArr.length) { this.myDialog.pic = true; } return false //包含的部件字段 case 'Count': let countUrl = this.onlyRead ? '/ledger/parts' : '/ledger/partsmanage'; this.$router.push({path: countUrl, query: { deviceId: infos.EquipID, typeId: this.mess.deviceId, pageNo: this.page.currentPage, pageSize: this.page.size }}); return false default: break; } if (!this.onlyRead && !inputData.Editable) { this.$message("该信息点的值为自动生成,不可人工维护!"); return false; } if (!this.onlyRead && showTools.InputModeArr.indexOf(inputData.InputMode) == '-1') { this.updateInfoPoint = val; this.updateInput = tools.dataForKey(this.tableData[row.row], val); this.myDialog.update = true; return false; } }, //关闭临时维护弹窗回调 handleCloseUpdate() { this.updateInputShow = false this.updateInfoPoint = '' this.updateInput = '' }, //更新临时维护信息点 handleClickUpdate() { tools.setDataForKey(this.tableData[this.row], this.updateInfoPoint, this.updateInput) this.handleUpdataTable([[this.row, this.updateInfoPoint, null, this.updateInput]], "edit") this.updateInputShow = false this.myDialog.update = false this.updateInput = '' }, //获取被筛选掉的行号 trimmedRows() { var plugin = this.hot.getPlugin("trimRows").trimmedRows; let dataLength = this.tableData.length; let dataArr = new Array(); for (let i = 0; i < dataLength; i++) { dataArr.push(i); } if (plugin.length <= 0) { dataArr = undefined; } else { dataArr = this.array_diff(dataArr, plugin); } return dataArr || []; }, //去除数组中相同的元素 array_diff(a, b) { for (var i = 0; i < b.length; i++) { for (var j = 0; j < a.length; j++) { if (a[j] == b[i]) { a.splice(j, 1); j = j - 1; } } } return a; }, //如果选择供应商之后 supplierChange(data, type) { if (type === 'dialog') { let firm = {...data, num: 8} this.firmName = firm } else { tools.setDataForKey(this.tableData[this.row], "DPSupplierID", data.venderId) tools.setDataForKey(this.tableData[this.row], "LedgerParam.SupplyPurchase.Supplier", data.name) this.handleUpdataTable( [ [this.row, "DPSupplierID", null, data.venderId], [this.row, "LedgerParam.SupplyPurchase.Supplier", null, data.name] ], "edit" ) // this.handleUpdataTable([[this.row, "LedgerParam.SupplyPurchase.Supplier", null, data.name]], "edit") } }, //供应合同编号 supplyChange(data) { tools.setDataForKey(this.tableData[this.row], "LedgerParam.SupplyPurchase.SupplierContractID", {id: data}) }, //保险单号-保险文件 guaranteeChange(data) { for (let key in data) { this.utilToKey(key, "insuranceNo", data, "InsuranceNum") if (key == "contractFile") { if (!!data[key]) { data[key] = [data[key]] } } this.utilToKey(key, "contractFile", data, "InsuranceFile") } }, //选择型号修改 firmChange(data, type) { if (type === 'dialog') { // 如果是批量信息维护 let venderName = data.venderName ? data.venderName : '空' let brandName = data.brandName ? data.brandName : '空' let name = data.name ? data.name : '空' let firm = { ...data, num: 2, Specification: data.name, name: `${venderName}/${brandName}/${name}` } this.firmName = firm //批量维护dialog显示对象的字段 } else { //如果是表格操作 tools.setDataForKey(this.tableData[this.row], "DPManufacturerID", data.venderId)//生产商ID tools.setDataForKey(this.tableData[this.row], "DPBrandID", data.brandId)//品牌ID tools.setDataForKey(this.tableData[this.row], "DPSpecificationID", data.specificationId)//型号ID tools.setDataForKey(this.tableData[this.row], "LedgerParam.EquipManufactor.Manufacturer", data.venderName) tools.setDataForKey(this.tableData[this.row], "LedgerParam.EquipManufactor.Brand", data.brandName) tools.setDataForKey(this.tableData[this.row], "LedgerParam.EquipManufactor.Specification", data.name) this.handleUpdataTable( [ [this.row, "DPManufacturerID", null, data.venderId], [this.row, "DPBrandID", null, data.brandId], [this.row, "DPSpecificationID", null, data.specificationId], [this.row, "LedgerParam.EquipManufactor.Manufacturer", null, data.venderName], [this.row, "LedgerParam.EquipManufactor.Brand", null, data.brandName], [this.row, "LedgerParam.EquipManufactor.Specification", null, data.name] ], "edit" ) // this.handleUpdataTable([[this.row, "LedgerParam.EquipManufactor.Brand", null, data.brand]], "edit") // this.handleUpdataTable([[this.row, "LedgerParam.EquipManufactor.Specification", null, data.name]], "edit") } }, //保险商变更 changeInsurer(data, type) { if (type === 'dialog') { let firm = {...data, num: 42} this.firmName = firm } else { tools.setDataForKey(this.tableData[this.row], "DPInsurerID", data.venderId) tools.setDataForKey(this.tableData[this.row], "LedgerParam.InsuranceDoc.Insurer", data.name) this.handleUpdataTable( [ [this.row, "DPInsurerID", null, data.venderId], [this.row, "LedgerParam.InsuranceDoc.Insurer", null, data.name] ], "edit" ) // this.handleUpdataTable([[this.row, "LedgerParam.InsuranceDoc.Insurer", null, data.name]], "edit") } }, //维修商变更 changeMaintainer(data, type) { if (type === 'dialog') { let firm = {...data, num: 35} this.firmName = firm } else { tools.setDataForKey(this.tableData[this.row], "DPMaintainerID", data.venderId) tools.setDataForKey(this.tableData[this.row], "LedgerParam.OperationMainte.Maintainer", data.name) this.handleUpdataTable( [ [this.row, "DPMaintainerID", null, data.venderId], [this.row, "LedgerParam.OperationMainte.Maintainer", null, data.name] ], "edit" ) // this.handleUpdataTable([[this.row, "LedgerParam.OperationMainte.Maintainer", null, data.name]], "edit") } }, //修改关联的资产 changeProperty(val) { this.setDataToMain(val.PropertyId, 'PropertyId', this.row); this.setDataToMain(val.LinkEquipLocalName, 'LinkEquipLocalName', this.row); }, //上传文件弹窗触发事件 fileChange(keys, type, file) { if (type === 'dialog') { // this.information = keys this.newEnclosure.forEach(i => { if (i.Path == keys) { this.$set(i, 'value', file) } return i }) } else { this.setDataToMain(keys, this.messKey, this.row); } }, //上传图片弹窗触发事件 imgChange(keys, type, file) { if (type === 'dialog') { // this.information = keys this.newEnclosure.forEach(i => { if (i.Path == keys) { this.$set(i, 'value', file) } return i }) } else { this.setDataToMain(keys, this.messKey, this.row); } }, //关联系统更改 changeSystemType(data) { tools.setDataForKey(this.tableData[this.row], "LinkSystem", data) }, //设备图片弹窗改变事件 changePics(keys, type,file) { if (type === 'dialog') { // this.information = keys this.newEnclosure.forEach(i => { if (i.Path == keys) { this.$set(i, 'value', file) } return i }) } else { this.setDataToMain(keys, this.messKey, this.row); } }, utilToKey(key, name, data, messName) { if (key == name) { this.setDataToMain(data[key], messName, this.row) } }, //判断是否有值,有值赋值 setDataToMain(data, key, row) { if (!!data && data != '--') { if (!!this.tableData[row]) { tools.setDataForKey(this.tableData[row], key, data); this.handleUpdataTable([[row, key, null, data]], "edit"); } else { this.tableData[row] = {}; tools.setDataForKey(this.tableData[row], key, data); } } else { tools.setDataForKey(this.tableData[row], key, ""); } }, // 批量信息维护 Batch() { this.firmDataType = 'dialog' this.$refs.batchDialogs.batchDialog = true }, upDataDevice(type, data1, data2) { let param = {Content: data1} let param1 = {Content: data2} if (type === 1) { //增量 //LedgerParam let filterParam = this.filterCheck(param, 'sole') let filterParam1 = this.filterCheck(param1, 'multiple') if (filterParam) { updateEquip(param, res => { }); } if (filterParam1) { setTimeout(() => { queryUpdate(param1, res => { }) }) } } if (type === 2) {//覆盖 let filterParams = this.filterCheck(param, 'sole') if (filterParams) { updateEquip(param, res => { }); } } setTimeout(() => { this.getTableData() this.getAllData() }, 10) }, filterCheck(arr, type) { if (type === 'sole') { for (let i of arr.Content) { return Object.keys(i.LedgerParam).length } } else if (type === 'multiple') { let nArr = []; arr.Content.forEach(i => { let {EquipID, ...value} = i nArr.push({LedgerParam: value}) }) for (let j of nArr) { return Object.keys(j.LedgerParam).length } } } }, watch: { projectId() { this.buildFloorData = [] buildFloor.getData(this.buildFloorData) this.tableData = [] this.mess.deviceId = null this.page.total = 0 }, showTypes: { handler(newName, oldName) { if (newName && newName[0] && newName[0].value) { this.showType = newName[0].value } else { this.showType = "" } }, immediate: true, deep: true } } }; </script> <style lang="less"> .hanson-bar { height: 40px; padding: 5px 0; font-size: 14px; overflow: hidden; margin-top: 0; line-height: 40px; .iconfont { font-size: 12px; } } .cancelButtonClass { width: 180px; } </style>