|
@@ -191,32 +191,36 @@
|
|
|
<span>组名称:{{ itemDataListByGroupName }}(共 {{ itemDataListByTree.length }} 项)</span>
|
|
|
<el-checkbox v-model="isSelectAllItem" @change="selectAllItem" style="float: right;">全选</el-checkbox>
|
|
|
</div>
|
|
|
- <el-input placeholder="请输入关键字进行过滤" v-model="filterItemData"></el-input>
|
|
|
+ <el-input placeholder="请输入关键字进行过滤" @input="itemChangeEvent" v-model="filterItemData"></el-input>
|
|
|
<div style="height: 50vh; margin-top: 10px; overflow: auto;">
|
|
|
- <el-tree class="cy-item-tree"
|
|
|
- ref="itemTree"
|
|
|
- :data="itemDataListByTree"
|
|
|
- :indent="10"
|
|
|
- node-key="id"
|
|
|
- show-checkbox
|
|
|
- :check-on-click-node="true"
|
|
|
- :filter-node-method="filterItemDataNode"
|
|
|
- :highlight-current="true"
|
|
|
- :default-expand-all="true"
|
|
|
- @check-change="handleItemCheckChange">
|
|
|
- <span class="custom-tree-node" slot-scope="{ node, data }">
|
|
|
- <svg-icon v-if="!data.children || data.children.length == 0" icon-class="file"/>
|
|
|
- <svg-icon v-else-if="node.expanded" icon-class="folder-open"/>
|
|
|
- <svg-icon v-else icon-class="folder"/>
|
|
|
- <span :title='data.itemName || "-"' style="margin-left: 2px;">
|
|
|
- {{
|
|
|
- data.describe
|
|
|
- ? ((data.itemName ? data.itemName : '') + '(' + data.describe + ')')
|
|
|
- : data.itemName ? data.itemName : ''
|
|
|
- }}
|
|
|
- </span>
|
|
|
- </span>
|
|
|
- </el-tree>
|
|
|
+<!-- <el-tree class="cy-item-tree"-->
|
|
|
+<!-- ref="itemTree"-->
|
|
|
+<!-- :data="itemDataListByTree"-->
|
|
|
+<!-- :indent="10"-->
|
|
|
+<!-- node-key="id"-->
|
|
|
+<!-- show-checkbox-->
|
|
|
+<!-- :check-on-click-node="true"-->
|
|
|
+<!-- :filter-node-method="filterItemDataNode"-->
|
|
|
+<!-- :highlight-current="true"-->
|
|
|
+<!-- :default-expand-all="true"-->
|
|
|
+<!-- @check-change="handleItemCheckChange">-->
|
|
|
+<!-- <span class="custom-tree-node" slot-scope="{ node, data }">-->
|
|
|
+<!-- <svg-icon v-if="!data.children || data.children.length == 0" icon-class="file"/>-->
|
|
|
+<!-- <svg-icon v-else-if="node.expanded" icon-class="folder-open"/>-->
|
|
|
+<!-- <svg-icon v-else icon-class="folder"/>-->
|
|
|
+<!-- <span :title='data.itemName || "-"' style="margin-left: 2px;">-->
|
|
|
+<!-- {{-->
|
|
|
+<!-- data.describe-->
|
|
|
+<!-- ? ((data.itemName ? data.itemName : '') + '(' + data.describe + ')')-->
|
|
|
+<!-- : data.itemName ? data.itemName : ''-->
|
|
|
+<!-- }}-->
|
|
|
+<!-- </span>-->
|
|
|
+<!-- </span>-->
|
|
|
+<!-- </el-tree>-->
|
|
|
+ <p-virtual-check ref="pvcChoose"
|
|
|
+ :data-sources="itemDataListByTree"
|
|
|
+ @check-change-all="checkChangeAllChoose"
|
|
|
+ @check-change="checkChangeChoose"></p-virtual-check>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div style="width: 100%;text-align: center;">
|
|
@@ -456,51 +460,47 @@
|
|
|
</div>
|
|
|
<div style="height: 30vh; margin-top: 10px; overflow: auto;">
|
|
|
<template v-if="!hasBelongDataFlag">
|
|
|
- <el-table :data="chooseGroupItemList"
|
|
|
- border
|
|
|
- @selection-change="selectionLineChangeHandle"
|
|
|
- :stripe="true"
|
|
|
- :header-cell-style="{background: '#E8E8E8'}"
|
|
|
- style="width: 100%"
|
|
|
- :key="bomItemKey">
|
|
|
- <el-table-column
|
|
|
- type="selection"
|
|
|
- width="55">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="序号" align="center" width="80">
|
|
|
- <template slot-scope="scope">
|
|
|
- {{ scope.$index + 1 }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="itemName" label="数据项名称" align="center">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="valueType" label="取值类型" align="center">
|
|
|
+ <u-table ref="plConditionTable"
|
|
|
+ row-key="label"
|
|
|
+ use-virtual
|
|
|
+ :height="250"
|
|
|
+ :data="chooseGroupItemList"
|
|
|
+ @selection-change="selectionLineChangeHandle"
|
|
|
+ :big-data-checkbox="true"
|
|
|
+ showBodyOverflow="title"
|
|
|
+ showHeaderOverflow="title"
|
|
|
+ style="margin-top: 10px;"
|
|
|
+ border>
|
|
|
+ <u-table-column type="selection" width="55" align="center"/>
|
|
|
+ <u-table-column type="index" label="序号" width="60" fixed align="center"/>
|
|
|
+ <u-table-column label="数据项名称" prop="itemName" sortable="custom" align="center"/>
|
|
|
+ <u-table-column prop="valueType" label="取值类型" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
{{ getValByProp(valueTypeList, scope.row.valueType) }}
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column v-if="templateReportType == 1" prop="valueTakingMode" label="取值模式" align="center">
|
|
|
+ </u-table-column>
|
|
|
+ <u-table-column v-if="templateReportType == 1" prop="valueTakingMode" label="取值模式" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
{{ getValByProp(valueTakingModeList, scope.row.valueTakingMode) }}
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column v-if="templateReportType == 1" prop="bucketType" label="取值时间单位" align="center">
|
|
|
+ </u-table-column>
|
|
|
+ <u-table-column v-if="templateReportType == 1" prop="bucketType" label="取值时间单位" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
{{ getValByProp(bucketTypeList, scope.row.bucketType) }}
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column v-if="templateReportType == 1" prop="bucketValue" label="数据切换周期" align="center">
|
|
|
- </el-table-column>
|
|
|
+ </u-table-column>
|
|
|
+ <u-table-column v-if="templateReportType == 1" prop="bucketValue" label="数据切换周期" align="center">
|
|
|
+ </u-table-column>
|
|
|
<template v-if="false">
|
|
|
- <el-table-column prop="startTime" label="取值时段范围" align="center">
|
|
|
+ <u-table-column prop="startTime" label="取值时段范围" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
{{ scope.row.startTime }}
|
|
|
{{ scope.row.startTime ? ',' : '' }}
|
|
|
{{ scope.row.endTime }}
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
+ </u-table-column>
|
|
|
</template>
|
|
|
- <el-table-column label="操作" align="center" width="80">
|
|
|
+ <u-table-column label="操作" align="center" width="80">
|
|
|
<template slot-scope="scope">
|
|
|
<el-button
|
|
|
type="text"
|
|
@@ -509,31 +509,27 @@
|
|
|
@click="handleItemDelete(scope.$index, scope.row)">删除
|
|
|
</el-button>
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
+ </u-table-column>
|
|
|
+ </u-table>
|
|
|
</template>
|
|
|
<template v-else>
|
|
|
- <el-table :data="chooseGroupItemList"
|
|
|
- border
|
|
|
- @selection-change="selectionLineChangeHandle"
|
|
|
- :stripe="true"
|
|
|
- :header-cell-style="{background: '#E8E8E8'}"
|
|
|
- style="width: 100%"
|
|
|
- :key="bomItemKey">
|
|
|
- <el-table-column
|
|
|
- type="selection"
|
|
|
- width="55">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="序号" align="center" width="80">
|
|
|
- <template slot-scope="scope">
|
|
|
- {{ scope.$index + 1 }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="itemName" label="数据项名称" align="center">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="dataValue" label="值" align="center">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="操作" align="center" width="80">
|
|
|
+ <u-table ref="plConditionTable"
|
|
|
+ row-key="label"
|
|
|
+ use-virtual
|
|
|
+ :height="250"
|
|
|
+ :data="chooseGroupItemList"
|
|
|
+ @selection-change="selectionLineChangeHandle"
|
|
|
+ :big-data-checkbox="true"
|
|
|
+ showBodyOverflow="title"
|
|
|
+ showHeaderOverflow="title"
|
|
|
+ style="margin-top: 10px;"
|
|
|
+ border>
|
|
|
+ <u-table-column type="selection" width="55" align="center"/>
|
|
|
+ <u-table-column type="index" label="序号" width="60" fixed align="center"/>
|
|
|
+ <u-table-column label="数据项名称" prop="itemName" sortable="custom" align="center"/>
|
|
|
+ <u-table-column prop="dataValue" label="值" align="center">
|
|
|
+ </u-table-column>
|
|
|
+ <u-table-column label="操作" align="center" width="80">
|
|
|
<template slot-scope="scope">
|
|
|
<el-button
|
|
|
type="text"
|
|
@@ -542,8 +538,8 @@
|
|
|
@click="handleItemDelete(scope.$index, scope.row)">删除
|
|
|
</el-button>
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
+ </u-table-column>
|
|
|
+ </u-table>
|
|
|
</template>
|
|
|
</div>
|
|
|
<!-- 设备报表 -->
|
|
@@ -790,6 +786,7 @@
|
|
|
|
|
|
<script>
|
|
|
import RulerView from '@/components/RulerView'
|
|
|
+import PVirtualCheck from "@/components/PVirtualCheck"
|
|
|
import LuckyExcel from 'luckyexcel'
|
|
|
import {
|
|
|
getAllDataModel,
|
|
@@ -815,7 +812,8 @@ import Print from "print-js";
|
|
|
export default {
|
|
|
name: 'index',
|
|
|
components: {
|
|
|
- RulerView
|
|
|
+ RulerView,
|
|
|
+ "p-virtual-check": PVirtualCheck,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
@@ -1029,9 +1027,9 @@ export default {
|
|
|
this.initLuckysheet(this.$route.query.id, this.$route.query.type)
|
|
|
}
|
|
|
},
|
|
|
- filterItemData(val) {
|
|
|
- this.$refs.itemTree.filter(val)
|
|
|
- },
|
|
|
+ // filterItemData(val) {
|
|
|
+ // this.$refs.itemTree.filter(val)
|
|
|
+ // },
|
|
|
filterDeviceItemData(val) {
|
|
|
this.$refs.deviceItemTree.filter(val)
|
|
|
},
|
|
@@ -1216,6 +1214,16 @@ export default {
|
|
|
}
|
|
|
this.dialogDataItemConfigVisible = true
|
|
|
},
|
|
|
+ setDataCondition(data) {
|
|
|
+ data.valueTakingMode = this.itemConditionForm.valueTakingMode
|
|
|
+ data.bucketType = this.itemConditionForm.bucketType
|
|
|
+ data.valueType = this.itemConditionForm.valueType
|
|
|
+ data.bucketValue = this.itemConditionForm.bucketValue
|
|
|
+ if (this.templateReportType == 0) {
|
|
|
+ data.startTime = this.itemConditionForm.dateRange[0]
|
|
|
+ data.endTime = this.itemConditionForm.dateRange[1]
|
|
|
+ }
|
|
|
+ },
|
|
|
/** 数据项配置结果集事件 */
|
|
|
chooseDataItemConfigEvent() {
|
|
|
// if (this.templateReportType == 0 && (!this.itemConditionForm.dateRange || this.itemConditionForm.dateRange.length == 0)) {
|
|
@@ -1225,24 +1233,29 @@ export default {
|
|
|
this.$refs['itemConditionForm'].validate((valid) => {
|
|
|
if (valid) {
|
|
|
this.$nextTick(() => {
|
|
|
- this.chooseGroupItemList.forEach((data) => {
|
|
|
- this.selectionDataItems.forEach((item) => {
|
|
|
- if (data.id === item.id) {
|
|
|
- data.valueTakingMode = this.itemConditionForm.valueTakingMode
|
|
|
- data.bucketType = this.itemConditionForm.bucketType
|
|
|
- data.valueType = this.itemConditionForm.valueType
|
|
|
- data.bucketValue = this.itemConditionForm.bucketValue
|
|
|
- if (this.templateReportType == 0) {
|
|
|
- data.startTime = this.itemConditionForm.dateRange[0]
|
|
|
- data.endTime = this.itemConditionForm.dateRange[1]
|
|
|
- }
|
|
|
+ let _this = this
|
|
|
+ const loading = showLoading(_this, '保存中,请稍候···')
|
|
|
+ if (_this.chooseGroupItemList.length == _this.selectionDataItems.length) {
|
|
|
+ _this.chooseGroupItemList.forEach((data) => {
|
|
|
+ _this.setDataCondition(data)
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ _this.selectionDataItems.forEach((item) => {
|
|
|
+ if (item.checked) {
|
|
|
+ _this.chooseGroupItemList.forEach((data) => {
|
|
|
+ if (data.id === item.id) {
|
|
|
+ _this.setDataCondition(data)
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
})
|
|
|
- })
|
|
|
- this.dialogDataItemConfigClose()
|
|
|
- this.dialogDataItemConfigVisible = false
|
|
|
- this.selectionDataItems = []
|
|
|
- this.bomItemKey++
|
|
|
+ }
|
|
|
+ loading.close()
|
|
|
+ _this.dialogDataItemConfigClose()
|
|
|
+ _this.dialogDataItemConfigVisible = false
|
|
|
+ _this.$refs.plConditionTable.clearSelection()
|
|
|
+ _this.selectionDataItems = []
|
|
|
+ _this.bomItemKey++
|
|
|
})
|
|
|
}
|
|
|
})
|
|
@@ -1299,17 +1312,36 @@ export default {
|
|
|
luckysheet.setCellValue(49, 0, luckysheet.getCellValue(49, 0))
|
|
|
}
|
|
|
},
|
|
|
- /** 数据项全选事件 */
|
|
|
- selectAllItem() {
|
|
|
- const data = traverseNode(this.$refs.itemTree.store.root.childNodes)
|
|
|
- if (this.isSelectAllItem) {
|
|
|
- // this.$refs.itemTree.setCheckedNodes(this.itemDataListByTree)
|
|
|
- let arr = traverseVisible(data)
|
|
|
- let ids = Array.from(arr, ({id}) => id)
|
|
|
- this.$refs.itemTree.setCheckedKeys(ids)
|
|
|
- } else {
|
|
|
- this.$refs.itemTree.setCheckedNodes([])
|
|
|
+ checkChangeChoose(datas) {
|
|
|
+ this.itemDataListByTree = datas
|
|
|
+ },
|
|
|
+ checkChangeAllChoose(flag) {
|
|
|
+ this.isSelectAllItem = flag
|
|
|
+ },
|
|
|
+ /** 数据项搜索条件 */
|
|
|
+ itemChangeEvent(value) {
|
|
|
+ let arr = JSON.parse(JSON.stringify(this.itemDataListByTree))
|
|
|
+ if (!value || !value.trim()) {
|
|
|
+ this.itemDataListByTree = arr
|
|
|
+ return
|
|
|
}
|
|
|
+ let filterList = arr.filter(v => {
|
|
|
+ return v.itemName.indexOf(value) !== -1
|
|
|
+ })
|
|
|
+ this.itemDataListByTree = filterList
|
|
|
+ },
|
|
|
+ /** 数据项全选事件 */
|
|
|
+ selectAllItem(val) {
|
|
|
+ // const data = traverseNode(this.$refs.itemTree.store.root.childNodes)
|
|
|
+ // if (this.isSelectAllItem) {
|
|
|
+ // // this.$refs.itemTree.setCheckedNodes(this.itemDataListByTree)
|
|
|
+ // let arr = traverseVisible(data)
|
|
|
+ // let ids = Array.from(arr, ({id}) => id)
|
|
|
+ // this.$refs.itemTree.setCheckedKeys(ids)
|
|
|
+ // } else {
|
|
|
+ // this.$refs.itemTree.setCheckedNodes([])
|
|
|
+ // }
|
|
|
+ this.$refs.pvcChoose.checkedAll(val)
|
|
|
},
|
|
|
/**数据项单项选择判断 */
|
|
|
handleItemCheckChange(data, checked, indeterminate) {
|
|
@@ -1670,7 +1702,12 @@ export default {
|
|
|
this.itemDataListByGroupName = res.data.groupName
|
|
|
let flag = this.chooseGroupItemList.length == 0
|
|
|
let tempList = flag ? this.chooseItemData : this.chooseGroupItemList
|
|
|
- let _data = res.data.itemList
|
|
|
+ let _data = res.data.itemList ? res.data.itemList : []
|
|
|
+ _data.forEach((t) => {
|
|
|
+ t.label = t.itemName
|
|
|
+ t.value = t.itemReadName
|
|
|
+ t.checked = false
|
|
|
+ })
|
|
|
this.itemDataListByTree = _data ? _data : []
|
|
|
if (this.$refs.itemTree) this.$refs.itemTree.setCheckedKeys([])
|
|
|
if (tempList.length > 0) {
|
|
@@ -1707,33 +1744,47 @@ export default {
|
|
|
},
|
|
|
/** 选择的数据项:第一步 */
|
|
|
chooseItemTreeEvent() {
|
|
|
- let checkedNodes = this.$refs.itemTree.getCheckedNodes(false, true)
|
|
|
- if (checkedNodes.length == 0) {
|
|
|
+ let _temp = JSON.parse(JSON.stringify(this.itemDataListByTree))
|
|
|
+ if (!_temp || _temp.length == 0) {
|
|
|
showAlertMsgWin(this, null, '请选择数据项!')
|
|
|
return
|
|
|
}
|
|
|
- let flag = this.chooseGroupItemList.length == 0
|
|
|
- let tempList = flag ? this.chooseItemData : this.chooseGroupItemList
|
|
|
- let _tempList = JSON.parse(JSON.stringify(tempList))
|
|
|
- let chooseList = []
|
|
|
- for (let i in checkedNodes) {
|
|
|
- let checkedNode = checkedNodes[i]
|
|
|
- if (checkedNode.children && checkedNode.children.length > 0) {
|
|
|
- continue
|
|
|
- }
|
|
|
- // 优化数据项选择条件后重新选择数据项时条件会消失
|
|
|
- for (let j in _tempList) {
|
|
|
- if (_tempList[j].id == checkedNode.id) {
|
|
|
- checkedNode.valueTakingMode = _tempList[j].valueTakingMode
|
|
|
- checkedNode.valueType = _tempList[j].valueType
|
|
|
- checkedNode.bucketType = _tempList[j].bucketType
|
|
|
- checkedNode.bucketValue = _tempList[j].bucketValue
|
|
|
- }
|
|
|
+ for (let i = _temp.length - 1; i >= 0; i --) {
|
|
|
+ if (!_temp[i].checked) {
|
|
|
+ _temp.splice(i, 1)
|
|
|
}
|
|
|
- console.log(checkedNode)
|
|
|
- chooseList.push(checkedNode)
|
|
|
}
|
|
|
- this.chooseItemData = chooseList
|
|
|
+ if (_temp.length == 0) {
|
|
|
+ showAlertMsgWin(this, null, '请选择数据项!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (_temp.length > 100) {
|
|
|
+ showAlertMsgWin(this, null, '报表数据项选择超过上限100!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // let flag = this.chooseGroupItemList.length == 0
|
|
|
+ // let tempList = flag ? this.chooseItemData : this.chooseGroupItemList
|
|
|
+ // let _tempList = JSON.parse(JSON.stringify(tempList))
|
|
|
+ // let chooseList = []
|
|
|
+ // for (let i in checkedNodes) {
|
|
|
+ // let checkedNode = checkedNodes[i]
|
|
|
+ // if (checkedNode.children && checkedNode.children.length > 0) {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // // 优化数据项选择条件后重新选择数据项时条件会消失
|
|
|
+ // for (let j in _tempList) {
|
|
|
+ // if (_tempList[j].id == checkedNode.id) {
|
|
|
+ // checkedNode.valueTakingMode = _tempList[j].valueTakingMode
|
|
|
+ // checkedNode.valueType = _tempList[j].valueType
|
|
|
+ // checkedNode.bucketType = _tempList[j].bucketType
|
|
|
+ // checkedNode.bucketValue = _tempList[j].bucketValue
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // console.log(checkedNode)
|
|
|
+ // chooseList.push(checkedNode)
|
|
|
+ // }
|
|
|
+ // this.chooseItemData = chooseList
|
|
|
+ this.chooseItemData = _temp
|
|
|
this.dialogDataItemVisible = false
|
|
|
if (this.dialogGroupItemVisible) {
|
|
|
this.initGroupItem()
|