Pre Merge pull request !281 from dq334/5.X

This commit is contained in:
dq334 2026-07-30 14:00:32 +00:00 committed by Gitee
commit e8c75a3809
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 361 additions and 0 deletions

View File

@ -0,0 +1,47 @@
import request from '@/utils/request';
import type { AxiosPromise } from 'axios';
/** 电厂信息 */
export interface PowerPlantInfo {
plantId?: number;
plantCode: string;
plantName: string;
plantShortName?: string;
plantType?: string;
installedCapacity?: number;
address?: string;
ownerUnit?: string;
operationDate?: string;
remark?: string;
createTime?: string;
}
/** 分页查询 */
export function listPowerPlant(query: any) {
return request({ url: '/dataCollection/powerPlant/list', method: 'get', params: query });
}
/** 查询详情 */
export function getPowerPlant(plantId: number) {
return request({ url: '/dataCollection/powerPlant/' + plantId, method: 'get' });
}
/** 新增 */
export function addPowerPlant(data: PowerPlantInfo) {
return request({ url: '/dataCollection/powerPlant', method: 'post', data });
}
/** 修改 */
export function updatePowerPlant(data: PowerPlantInfo) {
return request({ url: '/dataCollection/powerPlant', method: 'put', data });
}
/** 删除 */
export function delPowerPlant(plantIds: number | number[]) {
return request({ url: '/dataCollection/powerPlant/' + plantIds, method: 'delete' });
}
/** 导出 */
export function exportPowerPlant(query: any) {
return request({ url: '/dataCollection/powerPlant/export', method: 'post', params: query, responseType: 'blob' });
}

View File

@ -0,0 +1,314 @@
<template>
<div class="p-2">
<!-- 搜索栏 -->
<el-card shadow="hover" class="mb-[10px]">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="电厂编码" prop="plantCode">
<el-input v-model="queryParams.plantCode" placeholder="请输入电厂编码" clearable />
</el-form-item>
<el-form-item label="电厂名称" prop="plantName">
<el-input v-model="queryParams.plantName" placeholder="请输入电厂名称" clearable />
</el-form-item>
<el-form-item label="电厂类型" prop="plantType">
<el-select v-model="queryParams.plantType" placeholder="全部" clearable style="width:140px">
<el-option
v-for="item in dictOptions.sys_plant_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</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>
</el-card>
<!-- 表格 + 按钮 -->
<el-card shadow="hover">
<template #header>
<el-row :gutter="10">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dataCollection:powerPlant:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="selectedIds.length === 0" @click="handleDelete" v-hasPermi="['dataCollection:powerPlant:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dataCollection:powerPlant:export']">导出</el-button>
</el-col>
</el-row>
</template>
<el-table v-loading="loading" :data="tableData" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="电厂编码" prop="plantCode" width="120" align="center" />
<el-table-column label="电厂名称" prop="plantName" min-width="150" show-overflow-tooltip />
<el-table-column label="电厂简称" prop="plantShortName" min-width="120" show-overflow-tooltip />
<el-table-column label="电厂类型" prop="plantType" width="110" align="center">
<template #default="{ row }">
<dict-tag :options="dictOptions.sys_plant_type" :value="row.plantType" />
</template>
</el-table-column>
<el-table-column label="装机容量(MW)" prop="installedCapacity" width="130" align="right" />
<el-table-column label="业主单位" prop="ownerUnit" min-width="140" show-overflow-tooltip />
<el-table-column label="投运日期" prop="operationDate" width="120" align="center" />
<el-table-column label="创建时间" prop="createTime" width="160" align="center" />
<el-table-column label="操作" width="160" align="center" fixed="right">
<template #default="{ row }">
<el-button link type="primary" icon="Edit" @click="handleEdit(row)" v-hasPermi="['dataCollection:powerPlant:edit']">修改</el-button>
<el-button link type="primary" icon="View" @click="handleDetail(row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
</el-card>
<!-- 新增/编辑对话框 -->
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="600px">
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="电厂编码" prop="plantCode">
<el-input v-model="form.plantCode" placeholder="请输入电厂编码" />
</el-form-item>
<el-form-item label="电厂名称" prop="plantName">
<el-input v-model="form.plantName" placeholder="请输入电厂名称" />
</el-form-item>
<el-form-item label="电厂简称" prop="plantShortName">
<el-input v-model="form.plantShortName" placeholder="请输入电厂简称" />
</el-form-item>
<el-form-item label="电厂类型" prop="plantType">
<el-select v-model="form.plantType" placeholder="请选择电厂类型" style="width:100%">
<el-option
v-for="item in dictOptions.sys_plant_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="装机容量(MW)" prop="installedCapacity">
<el-input-number v-model="form.installedCapacity" :precision="3" :step="0.1" :min="0" style="width:100%" />
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input v-model="form.address" placeholder="请输入详细地址" />
</el-form-item>
<el-form-item label="业主单位" prop="ownerUnit">
<el-input v-model="form.ownerUnit" placeholder="请输入业主单位" />
</el-form-item>
<el-form-item label="投运日期" prop="operationDate">
<el-date-picker
v-model="form.operationDate"
value-format="YYYY-MM-DD"
type="date"
placeholder="请选择投运日期"
style="width:100%"
/>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm" :loading="submitting">确定</el-button>
</template>
</el-dialog>
<!-- 详情对话框 -->
<el-dialog title="电厂详情" v-model="detailVisible" width="550px">
<el-descriptions :column="2" border>
<el-descriptions-item label="电厂编码">{{ detail.plantCode }}</el-descriptions-item>
<el-descriptions-item label="电厂名称">{{ detail.plantName }}</el-descriptions-item>
<el-descriptions-item label="电厂简称">{{ detail.plantShortName }}</el-descriptions-item>
<el-descriptions-item label="电厂类型">
<dict-tag :options="dictOptions.sys_plant_type" :value="detail.plantType" />
</el-descriptions-item>
<el-descriptions-item label="装机容量(MW)">{{ detail.installedCapacity }}</el-descriptions-item>
<el-descriptions-item label="投运日期">{{ detail.operationDate }}</el-descriptions-item>
<el-descriptions-item label="业主单位" :span="2">{{ detail.ownerUnit }}</el-descriptions-item>
<el-descriptions-item label="详细地址" :span="2">{{ detail.address }}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{ detail.remark }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ detail.createTime }}</el-descriptions-item>
</el-descriptions>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted, getCurrentInstance } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { listPowerPlant, getPowerPlant, addPowerPlant, updatePowerPlant, delPowerPlant, exportPowerPlant } from '@/api/dataCollection/powerPlant';
import type { PowerPlantInfo } from '@/api/dataCollection/powerPlant';
//
const { proxy } = getCurrentInstance() as any;
const dictOptions = reactive({
sys_plant_type: [] as { label: string; value: string }[]
});
/** 加载字典 */
async function loadDicts() {
const res: any = await proxy.getDicts('sys_plant_type');
dictOptions.sys_plant_type = res.data || [];
}
//
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
plantCode: '',
plantName: '',
plantType: ''
});
const queryFormRef = ref();
//
const loading = ref(false);
const tableData = ref<PowerPlantInfo[]>([]);
const total = ref(0);
const selectedIds = ref<number[]>([]);
//
const dialogVisible = ref(false);
const dialogTitle = ref('');
const submitting = ref(false);
const formRef = ref();
const form = reactive<PowerPlantInfo>({
plantCode: '',
plantName: '',
plantShortName: '',
plantType: '',
installedCapacity: undefined,
address: '',
ownerUnit: '',
operationDate: '',
remark: ''
});
const rules = {
plantCode: [{ required: true, message: '电厂编码不能为空', trigger: 'blur' }],
plantName: [{ required: true, message: '电厂名称不能为空', trigger: 'blur' }]
};
//
const detailVisible = ref(false);
const detail = reactive<PowerPlantInfo>({});
/** 获取列表 */
async function getList() {
loading.value = true;
try {
const res: any = await listPowerPlant(queryParams);
tableData.value = res.rows || [];
total.value = res.total || 0;
} finally {
loading.value = false;
}
}
/** 搜索 */
function handleQuery() {
queryParams.pageNum = 1;
getList();
}
/** 重置 */
function resetQuery() {
queryParams.plantCode = '';
queryParams.plantName = '';
queryParams.plantType = '';
handleQuery();
}
/** 多选 */
function handleSelectionChange(selection: any[]) {
selectedIds.value = selection.map((r: any) => r.plantId);
}
/** 新增 */
function handleAdd() {
dialogTitle.value = '新增电厂';
resetForm();
dialogVisible.value = true;
}
/** 编辑 */
async function handleEdit(row: PowerPlantInfo) {
dialogTitle.value = '修改电厂';
const res: any = await getPowerPlant(row.plantId!);
const data = res.data || res;
Object.assign(form, data);
dialogVisible.value = true;
}
/** 详情 */
async function handleDetail(row: PowerPlantInfo) {
const res: any = await getPowerPlant(row.plantId!);
const data = res.data || res;
Object.assign(detail, data);
detailVisible.value = true;
}
/** 重置表单 */
function resetForm() {
Object.assign(form, {
plantId: undefined,
plantCode: '',
plantName: '',
plantShortName: '',
plantType: '',
installedCapacity: undefined,
address: '',
ownerUnit: '',
operationDate: '',
remark: ''
});
}
/** 提交表单 */
async function submitForm() {
await formRef.value?.validate();
submitting.value = true;
try {
if (form.plantId) {
await updatePowerPlant({ ...form } as any);
ElMessage.success('修改成功');
} else {
await addPowerPlant({ ...form } as any);
ElMessage.success('新增成功');
}
dialogVisible.value = false;
getList();
} finally {
submitting.value = false;
}
}
/** 删除 */
async function handleDelete() {
await ElMessageBox.confirm('确认删除所选电厂信息?', '提示', { type: 'warning' });
await delPowerPlant(selectedIds.value);
ElMessage.success('删除成功');
getList();
}
/** 导出 */
function handleExport() {
exportPowerPlant(queryParams);
ElMessage.success('导出请求已发送');
}
onMounted(() => {
loadDicts();
getList();
});
</script>