ustcyc
2025-01-08 e58b27d9b5b6b3d63267ca89d28ebe9d3363f94b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<template>
    <div class="page">
        <div class="page-container">
            <div class="page-container-left">
                <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" />
            </div>
            <div class="page-container-right">
                <div class="form-card">
                    <el-form :model="form" ref="queryRef" :inline="true" label-width="85px">
                        <el-form-item label="能源品种">
                            <el-select v-model="form.energyType" placeholder="请选择能源品种" style="width: 100%">
                                <el-option v-for="dict in energyVarietiesList" :key="dict.enerclassid"
                                    :label="dict.enerclassname" :value="dict.enerclassid" />
                            </el-select>
                        </el-form-item>
                        <el-form-item>
                            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
                            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
                        </el-form-item>
                    </el-form>
                </div>
                <div class="mt20 mb20 ml20">
                    <el-button type="primary" icon="Plus" @click="handleAdd">关联</el-button>
                </div>
                <div class="table-box">
                    <el-table :data="tableData" v-loading="loading" height="calc(100vh - 450px)">
                        <el-table-column type="index" label="序号" width="100" />
                        <el-table-column label="用能单位" prop="nodeId" align="center" show-overflow-tooltip
                            :formatter="(row, column) => findLabelById(treeNode, row.nodeId)" />
                        <!-- <el-table-column label="策略编码" prop="indexName" align="center" show-overflow-tooltip /> -->
                        <el-table-column label="策略名称" prop="tacticsId" align="center" show-overflow-tooltip
                            :formatter="(row, column) => formatterTacticsLabel(allUnitPriceStrategy, row.tacticsId)" />
                        <el-table-column label="能源品种" prop="energyType" align="center" show-overflow-tooltip
                            :formatter="(row, column) => formatterLabel(energyVarietiesList, row.energyType)" />
                        <!-- <el-table-column label="是否阶梯价格" prop="alarmValue" align="center" show-overflow-tooltip /> -->
                        <el-table-column label="有效期起始" prop="effectiveBeginTime" align="center" show-overflow-tooltip />
                        <el-table-column label="有效期截止" prop="effectiveEndTime" align="center" show-overflow-tooltip />
                        <el-table-column label="说明" prop="remark" align="center" show-overflow-tooltip />
                        <el-table-column label="操作" width="220" align="center">
                            <template #default="scope">
                                <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row, scope.$index)">
                                    编辑
                                </el-button>
                                <el-button link type="primary" icon="Delete"
                                    @click="handleDel(scope.row, scope.$index)">
                                    删除
                                </el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
                        v-model:limit="queryParams.pageSize" @pagination="getList" />
                </div>
                <EditModal ref="editModalRef" :energyVarietiesList='energyVarietiesList'
                    :allUnitPriceStrategy='allUnitPriceStrategy' @getList="getList" />
            </div>
        </div>
    </div>
</template>
<script setup>
import { unitPriceCorrelationList, unitPriceCorrelationDel, unitPriceStrategyAllList } from '@/api/costManage/costManage.js'
const { proxy } = getCurrentInstance();
import EditModal from './components/EditModal'
import { listEnergyVarietiesList } from "@/api/modelConfiguration/energyVarieties";
const energyVarietiesList = ref([]);
function getEnergyVarietiesList() {
    listEnergyVarietiesList().then((res) => {
        energyVarietiesList.value = res.data;
    });
}
getEnergyVarietiesList()
 
let loading = ref(false);
let tableData = ref([{}]);
let editModalRef = ref()
 
 
function handleAdd(row) {
    if (editModalRef.value) {
        editModalRef.value.handleOpen(row, currentNode.value)
    }
}
 
 
function handleQuery() {
    queryParams.value.pageNum = 1
    getList()
}
function resetQuery() {
    form.value = {
        nodeId: currentNode.value.id
    }
    queryParams.value.pageNum = 1
    getList()
}
 
let currentNode = ref()
let treeNode = ref([])
function handleNodeClick(data, nodeOptions) {
    currentNode.value = data
    treeNode.value = nodeOptions
    form.value.nodeId = data.id
    getList()
}
 
let form = ref({
    energyType: null
})
let queryParams = ref({
    pageNum: 1,
    pageSize: 10,
})
let total = ref(0)
//获取列表
function getList() {
    loading.value = true
    unitPriceCorrelationList({ ...queryParams.value, ...form.value }).then(res => {
        tableData.value = res.rows
        total.value = res.total
        loading.value = false
    })
}
 
getList()
function handleDel(row) {
    proxy.$modal
        .confirm('是否确认删除该数据项?')
        .then(function () {
            return unitPriceCorrelationDel(row.id);
        })
        .then(() => {
            resetQuery();
            proxy.$modal.msgSuccess("删除成功");
        })
        .catch(() => { });
}
function formatterLabel(list, value) {
    let dict = list.find(item => item.enerclassid == value)
    return dict ? dict.enerclassname : ''
}
function formatterTacticsLabel(list, value) {
    let dict = list.find(item => item.id == value)
    return dict ? dict.tacticsName : ''
}
 
 
let allUnitPriceStrategy = ref([])
function getAllUnitPriceStrategy() {
    unitPriceStrategyAllList().then(res => {
        if (res.code == 200) {
            allUnitPriceStrategy.value = res.data
        }
    })
}
 
getAllUnitPriceStrategy()
 
// 递归函数,根据id查找label
function findLabelById(tree, targetId) {
    for (const node of tree) {
        if (node.id === targetId) {
            return node.label;
        }
        if (node.children && node.children.length > 0) {
            const result = findLabelById(node.children, targetId);
            if (result) {
                return result;
            }
        }
    }
    return null;
}
</script>
 
<style scoped lang="scss">
@import "@/assets/styles/page.scss";
</style>