You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

330 lines
10 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryFormRef" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)" prop="actionStepObjId">
<el-input
v-model="queryParams.actionStepObjId"
placeholder="请输入关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="图片存储URL" prop="imageUrl">
<el-input v-model="queryParams.imageUrl" placeholder="请输入图片存储URL" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="图片在当前步骤内的顺序从1开始" prop="imageSequence">
<el-input v-model="queryParams.imageSequence" placeholder="请输入图片在当前步骤内的顺序从1开始" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['ems/base:emsAlarmActionStepImage:add']"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['ems/base:emsAlarmActionStepImage:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['ems/base:emsAlarmActionStepImage:remove']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['ems/base:emsAlarmActionStepImage:export']"
>导出</el-button
>
</el-col>
<right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="emsAlarmActionStepImageList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="objId" />
<el-table-column label="关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)" align="center" prop="actionStepObjId"> </el-table-column>
<el-table-column label="图片存储URL" align="center" prop="imageUrl"> </el-table-column>
<el-table-column label="图片在当前步骤内的顺序从1开始" align="center" prop="imageSequence"> </el-table-column>
<el-table-column label="图片描述 (可选)" align="center" prop="description"> </el-table-column>
<el-table-column label="备注" align="center" prop="remark"> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['ems/base:emsAlarmActionStepImage:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['ems/base:emsAlarmActionStepImage:remove']"
>删除</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" />
<!-- 添加或修改报警措施步骤图片对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)" prop="actionStepObjId">
<el-input v-model="form.actionStepObjId" placeholder="请输入关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)" />
</el-form-item>
<el-form-item label="图片存储URL" prop="imageUrl">
<el-input v-model="form.imageUrl" placeholder="请输入图片存储URL" />
</el-form-item>
<el-form-item label="图片在当前步骤内的顺序从1开始" prop="imageSequence">
<el-input v-model="form.imageSequence" placeholder="请输入图片在当前步骤内的顺序从1开始" />
</el-form-item>
<el-form-item label="图片描述 (可选)" prop="description">
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import {
listEmsAlarmActionStepImage,
getEmsAlarmActionStepImage,
delEmsAlarmActionStepImage,
addEmsAlarmActionStepImage,
updateEmsAlarmActionStepImage
} from '@/api/ems/base/emsAlarmActionStepImage';
defineOptions({
name: 'EmsAlarmActionStepImage'
} as any);
const { proxy } = getCurrentInstance() as any;
const formRef = ref<any>();
const queryFormRef = ref<any>();
// 这里统一通过工厂函数重建表单,避免弹窗在新增/编辑切换时残留上一条业务数据。
const createFormData = () => ({
objId: null,
actionStepObjId: null,
imageUrl: null,
imageSequence: null,
description: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
});
// 这里保留原页面字段结构,优先保证 EMS 业务行为与接口入参不发生漂移。
const state = reactive({
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 报警措施步骤图片表格数据
emsAlarmActionStepImageList: [],
// 弹出层标题
title: '',
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
actionStepObjId: null,
imageUrl: null,
imageSequence: null,
description: null
},
// 表单参数
form: createFormData(),
// 表单校验
rules: {
actionStepObjId: [
{
required: true,
message: '关联的措施步骤ID (逻辑关联 ems_alarm_action_step.obj_id)不能为空',
trigger: 'blur'
}
],
imageUrl: [
{
required: true,
message: '图片存储URL不能为空',
trigger: 'blur'
}
],
imageSequence: [
{
required: true,
message: '图片在当前步骤内的顺序从1开始不能为空',
trigger: 'blur'
}
]
}
} as any);
const { emsAlarmActionStepImageList, form, ids, loading, multiple, open, queryParams, rules, showSearch, single, title, total } = toRefs(state);
const getList = () => {
loading.value = true;
listEmsAlarmActionStepImage(queryParams.value).then((response) => {
emsAlarmActionStepImageList.value = response.rows;
total.value = response.total;
loading.value = false;
});
};
const cancel = () => {
open.value = false;
reset();
};
const reset = () => {
form.value = {
objId: null,
actionStepObjId: null,
imageUrl: null,
imageSequence: null,
description: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
};
formRef.value?.resetFields();
};
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
const handleSelectionChange = (selection) => {
ids.value = selection.map((item) => item.objId);
single.value = selection.length !== 1;
multiple.value = !selection.length;
};
const handleAdd = () => {
reset();
open.value = true;
title.value = '添加报警措施步骤图片';
};
const handleUpdate = (row) => {
reset();
const objId = row.objId || ids.value;
getEmsAlarmActionStepImage(objId).then((response) => {
form.value = response.data;
open.value = true;
title.value = '修改报警措施步骤图片';
});
};
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
if (form.value.objId != null) {
updateEmsAlarmActionStepImage(form.value).then((response) => {
proxy?.$modal.msgSuccess('修改成功');
open.value = false;
getList();
});
} else {
addEmsAlarmActionStepImage(form.value).then((response) => {
proxy?.$modal.msgSuccess('新增成功');
open.value = false;
getList();
});
}
}
});
};
const handleDelete = (row) => {
const objIds = row.objId || ids.value;
proxy?.$modal
.confirm('是否确认删除报警措施步骤图片编号为"' + objIds + '"的数据项?')
.then(function () {
return delEmsAlarmActionStepImage(objIds);
})
.then(() => {
getList();
proxy?.$modal.msgSuccess('删除成功');
})
.catch(() => {});
};
const handleExport = () => {
proxy?.download(
'ems/base/emsAlarmActionStepImage/export',
{
...queryParams.value
},
`emsAlarmActionStepImage_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>