Files
energy_storage/web/src/views/system/policy.vue
zhoumengru 5e44faee0d feat(system): 优化设备列表展示逻辑
- 调整设备编号展示位置,解决信息冗余问题
- 优化设备状态展示方式,增加颜色区分
- 改进设备参数展示布局,提高可读性
- 统一模态样式,调整弹窗位置
2025-09-12 16:34:29 +08:00

242 lines
6.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="policy" ref="policy">
<searchBox :btn-option-list="btnOptionList" @onSearch="onSearch" @operateForm="operateForm" />
<div class="content-table">
<ComTable
:columns="columns"
:table-data="tableData"
@handlePagesizeChange="handlePagesizeChange"
ref="comTable"
:table-option="tableOption"
:page-option="pageOption"
>
<template #type="record">
<div>{{ getPolicyType(record.type) }}</div>
</template>
<template #isOpen="record">
<a-tag :color="record.is_open == 1 ? 'green' : 'red'">{{
record.is_open == 1 ? '启用' : '禁用'
}}</a-tag>
</template>
<template #action="record">
<OperateCom :record="record" :operate-list="operateList" @operateForm="operateForm" />
</template>
</ComTable>
</div>
</div>
<!-- <div> -->
<a-modal
v-model:open="formModal"
width="800px"
style="top: 80px;height: 600px;"
:footer="null"
:get-container="() => $refs.policy"
>
<policyForm v-if="formModal" :form-state="formState" :form-status="formStatus" @closeModal="closeModal" />
</a-modal>
<!-- </div> -->
</template>
<script>
import policyForm from '@/components/system/policyForm.vue'
import { getReq } from '@/request/api'
import { policyTypes } from '@/utils/config'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { createVNode } from 'vue'
export default {
name: '',
components: { policyForm },
props: {},
data() {
return {
formModal: false,
btnOptionList: [
],
columns: [
{
title: '策略ID',
dataIndex: 'policy_id',
key: 'policyId',
ellipsis: true
},
{
title: '策略名称',
dataIndex: 'name',
key: 'name',
ellipsis: true
},
{
title: '策略类型',
dataIndex: 'type', //策略类型1削峰套利2需求响应3自发自用
key: 'type',
ellipsis: true,
scopedSlots: { customRender: 'type' }
},
{
title: '策略描述',
dataIndex: 'describe',
key: 'describe',
ellipsis: true
},
{
title: '策略参数',
dataIndex: 'value',
key: 'value',
width: 200,
ellipsis: true
},
{
title: '是否启用',
dataIndex: 'is_open',
key: 'isOpen',
ellipsis: true,
scopedSlots: { customRender: 'isOpen' }
},
{
title: '操作',
dataIndex: 'action',
key: 'action',
ellipsis: true,
fixed:'right',
scopedSlots: { customRender: 'action' }
}
],
tableData: [],
tableOption: {
select:false
},
pageOption: {
page: 1,
pageSize: 10,
count: 0
},
formState: {},
formStatus: 'add', //表单状态辑状态 add:新增 edit:编辑
operateList:[]
}
},
mounted() {
this.operateList = this.$getBtns(['查看', '修改', '删除'])
this.btnOptionList = this.$getBtns(['新增'])
this.getTableList()
},
methods: {
async getTableList() {
this.$refs.comTable.loading = true
try {
this.$refs.comTable.loading = false
const res = await getReq('/queryPolicyList', {
page: this.pageOption.page,
page_size: this.pageOption.pageSize
})
this.tableData = res.data
this.pageOption.count = res.count
} catch (error) {
console.log(error)
this.$refs.comTable.loading = false
}
},
getPolicyType(type) {
return policyTypes.find((item) => item.value == type)?.label || ''
},
onSearch(data) {
console.log(data)
},
operateForm(type, record = {}) {
console.log(type, record)
this.formStatus = type
switch (type) {
case 'add':
this.formModal = true
this.formState = {}
break
case 'read':
this.formModal = true
this.formState = record
break
case 'del':
this.handleDelete(record.policy_id)
break
case 'edit':
this.formModal = true
this.formState = record
break
default:
break
}
},
// async handleDelete(record) {
// try {
// const res = await getReq('/deletePolicy', {
// policy_id: record['policy_id']
// })
// if (res.errcode == 0) {
// this.$message.success('删除成功')
// this.getTableList()
// }
// } catch (error) {
// this.$message.success(error)
// }
// },
// 删除操作
async handleDelete(id) {
const that = this
this.$Modal.confirm({
title: '你确认删除数据吗?',
icon: createVNode(ExclamationCircleOutlined),
async onOk() {
try {
const res = await getReq('/deletePolicy', {
policy_id: id
})
if (res.errcode == 0) {
that.$message.success('删除成功')
that.getTableList()
}
} catch (error) {
that.$message.success(error)
}
},
onCancel() {
// console.log("Cancel");
},
class: 'test'
})
},
closeModal(flag = false) {
this.formModal = false
if (flag) {
this.pageOption.page = 1
this.getTableList()
}
},
handlePagesizeChange(data) {
if (data.pageSize !== this.pageOption.pageSize) {
this.pageOption.page = 1
} else {
this.pageOption.page = data.page
}
this.pageOption.pageSize = data.pageSize
this.getTableList()
}
}
}
</script>
<style lang="scss" scoped>
.policy {
// width: 100%;
height: 100%;
padding: 0 10px;
.content-table {
width: 100%;
height: calc(100% - 90px);
}
}
</style>