l3能源成本分摊(部分完成留存)
This commit is contained in:
311
klp-ui/src/views/ems/task/allocationTask.vue
Normal file
311
klp-ui/src/views/ems/task/allocationTask.vue
Normal file
@@ -0,0 +1,311 @@
|
||||
<template>
|
||||
<div class="allocation-task-page">
|
||||
<!-- 查询条件 -->
|
||||
<el-card class="search-card">
|
||||
<el-form :model="queryParams" label-width="120px" size="small">
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-form-item label="任务日期:">
|
||||
<el-date-picker v-model="queryParams.taskDate" type="date" placeholder="选择任务日期" value-format="yyyy-MM-dd" @change="handleQuery"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-form-item label="能源类型:">
|
||||
<el-select v-model="queryParams.energyTypeId" placeholder="请选择能源类型" clearable @change="handleQuery">
|
||||
<el-option v-for="item in energyTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-form-item label="任务状态:">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable @change="handleQuery">
|
||||
<el-option label="待执行" :value="0"></el-option>
|
||||
<el-option label="执行中" :value="1"></el-option>
|
||||
<el-option label="已完成" :value="2"></el-option>
|
||||
<el-option label="失败" :value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
|
||||
<el-button type="success" icon="el-icon-plus" size="small" @click="openAddDialog">新增任务</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<!-- 任务列表 -->
|
||||
<el-card class="list-card" v-loading="loading">
|
||||
<div slot="header" class="clearfix">
|
||||
<span class="card-title">能源分摊任务列表</span>
|
||||
</div>
|
||||
|
||||
<el-table :data="taskList" stripe border>
|
||||
<el-table-column prop="taskId" label="任务ID" width="100"></el-table-column>
|
||||
<el-table-column prop="taskDate" label="任务日期" width="120"></el-table-column>
|
||||
<el-table-column prop="energyTypeName" label="能源类型" width="100"></el-table-column>
|
||||
<el-table-column prop="allocationScope" label="分摊范围" width="100"></el-table-column>
|
||||
<el-table-column prop="status" label="任务状态" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.status === 0" type="info">待执行</el-tag>
|
||||
<el-tag v-else-if="scope.row.status === 1" type="warning">执行中</el-tag>
|
||||
<el-tag v-else-if="scope.row.status === 2" type="success">已完成</el-tag>
|
||||
<el-tag v-else type="danger">失败</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="executeMode" label="执行方式" width="100"></el-table-column>
|
||||
<el-table-column prop="totalConsumption" label="总消耗量" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ formatNumber(scope.row.totalConsumption, 2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="totalCost" label="总成本" width="120">
|
||||
<template slot-scope="scope">
|
||||
¥ {{ formatNumber(scope.row.totalCost, 2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="180"></el-table-column>
|
||||
<el-table-column label="操作" width="200" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.status === 0 || scope.row.status === 3"
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click="runTask(scope.row)">
|
||||
执行
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.status === 2"
|
||||
type="warning"
|
||||
size="mini"
|
||||
@click="rerunTask(scope.row)">
|
||||
重新执行
|
||||
</el-button>
|
||||
<el-button type="info" size="mini" @click="viewDetail(scope.row)">详情</el-button>
|
||||
<el-button type="danger" size="mini" @click="deleteTask(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
<el-pagination
|
||||
:current-page="queryParams.pageNum"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="queryParams.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
@size-change="handlePageSizeChange"
|
||||
@current-change="handlePageChange"
|
||||
style="margin-top: 20px; text-align: right;"
|
||||
></el-pagination>
|
||||
</el-card>
|
||||
|
||||
<!-- 新增任务对话框 -->
|
||||
<el-dialog title="新增分摊任务" :visible.sync="addDialogVisible" width="500px" @close="closeAddDialog">
|
||||
<el-form :model="addForm" label-width="120px" size="small" ref="addFormRef">
|
||||
<el-form-item label="任务日期:" prop="taskDate">
|
||||
<el-date-picker v-model="addForm.taskDate" type="date" placeholder="选择任务日期" value-format="yyyy-MM-dd"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="能源类型:" prop="energyTypeId">
|
||||
<el-select v-model="addForm.energyTypeId" placeholder="请选择能源类型(留空则全部)">
|
||||
<el-option label="全部能源类型" :value="null"></el-option>
|
||||
<el-option v-for="item in energyTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="分摊范围:" prop="allocationScope">
|
||||
<el-select v-model="addForm.allocationScope" placeholder="请选择分摊范围">
|
||||
<el-option label="按库区" value="warehouse"></el-option>
|
||||
<el-option label="按仪表" value="meter"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeAddDialog">取消</el-button>
|
||||
<el-button type="primary" @click="submitAddTask">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 详情对话框 -->
|
||||
<el-dialog title="任务详情" :visible.sync="detailDialogVisible" width="600px" @close="closeDetailDialog">
|
||||
<el-descriptions :column="2" border v-if="selectedTask">
|
||||
<el-descriptions-item label="任务ID">{{ selectedTask.taskId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="任务日期">{{ selectedTask.taskDate }}</el-descriptions-item>
|
||||
<el-descriptions-item label="能源类型">{{ selectedTask.energyTypeName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="分摊范围">{{ selectedTask.allocationScope }}</el-descriptions-item>
|
||||
<el-descriptions-item label="任务状态">
|
||||
<el-tag v-if="selectedTask.status === 0" type="info">待执行</el-tag>
|
||||
<el-tag v-else-if="selectedTask.status === 1" type="warning">执行中</el-tag>
|
||||
<el-tag v-else-if="selectedTask.status === 2" type="success">已完成</el-tag>
|
||||
<el-tag v-else type="danger">失败</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="执行方式">{{ selectedTask.executeMode }}</el-descriptions-item>
|
||||
<el-descriptions-item label="总消耗量">{{ formatNumber(selectedTask.totalConsumption, 2) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="总成本">¥ {{ formatNumber(selectedTask.totalCost, 2) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间" :span="2">{{ selectedTask.createTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="错误信息" :span="2" v-if="selectedTask.message">
|
||||
<el-alert :title="selectedTask.message" type="error" :closable="false"></el-alert>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listEnergyTask } from '@/api/ems/energyAllocation'
|
||||
|
||||
export default {
|
||||
name: 'AllocationTask',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
total: 0,
|
||||
queryParams: {
|
||||
taskDate: null,
|
||||
energyTypeId: null,
|
||||
status: null,
|
||||
pageNum: 1,
|
||||
pageSize: 20
|
||||
},
|
||||
taskList: [],
|
||||
energyTypeList: [
|
||||
{ id: 1, name: '电' },
|
||||
{ id: 2, name: '水' },
|
||||
{ id: 3, name: '气' }
|
||||
],
|
||||
addDialogVisible: false,
|
||||
addForm: {
|
||||
taskDate: null,
|
||||
energyTypeId: null,
|
||||
allocationScope: 'warehouse'
|
||||
},
|
||||
detailDialogVisible: false,
|
||||
selectedTask: null
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.handleQuery();
|
||||
},
|
||||
methods: {
|
||||
handleQuery() {
|
||||
this.loading = true;
|
||||
listEnergyTask(this.queryParams).then(response => {
|
||||
this.taskList = response.rows || [];
|
||||
this.total = response.total || 0;
|
||||
}).catch(() => {
|
||||
this.$message.error('加载任务列表失败');
|
||||
}).finally(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
resetQuery() {
|
||||
this.queryParams = {
|
||||
taskDate: null,
|
||||
energyTypeId: null,
|
||||
status: null,
|
||||
pageNum: 1,
|
||||
pageSize: 20
|
||||
};
|
||||
this.handleQuery();
|
||||
},
|
||||
handlePageChange(page) {
|
||||
this.queryParams.pageNum = page;
|
||||
this.handleQuery();
|
||||
},
|
||||
handlePageSizeChange(size) {
|
||||
this.queryParams.pageSize = size;
|
||||
this.handleQuery();
|
||||
},
|
||||
openAddDialog() {
|
||||
this.addForm = {
|
||||
taskDate: null,
|
||||
energyTypeId: null,
|
||||
allocationScope: 'warehouse'
|
||||
};
|
||||
this.addDialogVisible = true;
|
||||
},
|
||||
closeAddDialog() {
|
||||
this.addDialogVisible = false;
|
||||
this.$refs.addFormRef && this.$refs.addFormRef.clearValidate();
|
||||
},
|
||||
submitAddTask() {
|
||||
if (!this.addForm.taskDate) {
|
||||
this.$message.error('请选择任务日期');
|
||||
return;
|
||||
}
|
||||
// TODO: 调用后端API创建任务
|
||||
this.$message.success('任务创建成功');
|
||||
this.closeAddDialog();
|
||||
this.handleQuery();
|
||||
},
|
||||
runTask(row) {
|
||||
this.$confirm('确定要执行该任务吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
// TODO: 调用后端API执行任务
|
||||
this.$message.success('任务已提交执行');
|
||||
this.handleQuery();
|
||||
}).catch(() => {});
|
||||
},
|
||||
rerunTask(row) {
|
||||
this.$confirm('确定要重新执行该任务吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
// TODO: 调用后端API重新执行任务
|
||||
this.$message.success('任务已重新提交执行');
|
||||
this.handleQuery();
|
||||
}).catch(() => {});
|
||||
},
|
||||
viewDetail(row) {
|
||||
this.selectedTask = row;
|
||||
this.detailDialogVisible = true;
|
||||
},
|
||||
closeDetailDialog() {
|
||||
this.detailDialogVisible = false;
|
||||
this.selectedTask = null;
|
||||
},
|
||||
deleteTask(row) {
|
||||
this.$confirm('确定删除该任务吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
// TODO: 调用后端API删除任务
|
||||
this.$message.success('删除成功');
|
||||
this.handleQuery();
|
||||
}).catch(() => {});
|
||||
},
|
||||
formatNumber(value, decimals = 2) {
|
||||
if (value === null || value === undefined) return '0.00';
|
||||
return parseFloat(value).toFixed(decimals);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.allocation-task-page {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.search-card {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.list-card {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user