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.

381 lines
14 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='p-2'>
<transition :enter-active-class='proxy?.animate.searchAnimate.enter'
:leave-active-class='proxy?.animate.searchAnimate.leave'>
<div v-show='showSearch' class='mb-[10px]'>
<el-card shadow='hover'>
<el-form ref='queryFormRef' :model='queryParams' :inline='true'>
<!-- <el-form-item label='报警规则类型' prop='alarmRuleType'>-->
<!-- <el-select v-model='queryParams.alarmRuleType' placeholder='请选择报警规则类型' clearable>-->
<!-- <el-option v-for='dict in dms_alarm_rule_type' :key='dict.value' :label='dict.label'-->
<!-- :value='dict.value' />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label='联动类型' prop='linkType'>
<el-select v-model='queryParams.linkType' placeholder='请选择联动类型' clearable>
<el-option v-for='dict in dms_link_type' :key='dict.value' :label='dict.label' :value='dict.value' />
</el-select>
</el-form-item>
<el-form-item label='联动设备' prop='linkDeviceId'>
<el-input v-model='queryParams.linkDeviceId' placeholder='请输入联动设备' clearable
@keyup.enter='handleQuery' />
</el-form-item>
<el-form-item label='联动设备功能' prop='linkDeviceFunctionId' label-width='100px'>
<el-input v-model='queryParams.linkDeviceFunctionId'
placeholder='请输入联动设备功能' clearable
@keyup.enter='handleQuery' />
</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>
</div>
</transition>
<el-card shadow='never'>
<template #header>
<el-row :gutter='10' class='mb8'>
<el-col :span='1.5'>
<el-button type='primary' plain icon='Plus' @click='handleAdd' v-hasPermi="['dms:alarmRuleLink:add']">
</el-button>
</el-col>
<el-col :span='1.5'>
<el-button type='success' plain icon='Edit' :disabled='single' @click='handleUpdate()'
v-hasPermi="['dms:alarmRuleLink:edit']">
</el-button>
</el-col>
<el-col :span='1.5'>
<el-button type='danger' plain icon='Delete' :disabled='multiple' @click='handleDelete()'
v-hasPermi="['dms:alarmRuleLink:remove']">
</el-button>
</el-col>
<el-col :span='1.5'>
<el-button type='warning' plain icon='Download' @click='handleExport'
v-hasPermi="['dms:alarmRuleLink:export']">
</el-button>
</el-col>
<right-toolbar v-model:showSearch='showSearch' :columns='columns' :search='true'
@queryTable='getList'></right-toolbar>
</el-row>
</template>
<el-table v-loading='loading' :data='alarmRuleLinkList' @selection-change='handleSelectionChange'>
<el-table-column type='selection' width='55' align='center' />
<el-table-column label='报警规则关联ID' align='center' prop='ruleLinkId' v-if='columns[0].visible' />
<el-table-column label='报警规则类型' align='center' prop='alarmRuleType'
v-if='columns[1].visible'>
<template #default='scope'>
<dict-tag :options='dms_alarm_rule_type' :value='scope.row.alarmRuleType' />
</template>
</el-table-column>
<el-table-column label='报警规则ID' align='center' prop='alarmRuleId'
v-if='columns[2].visible' />
<el-table-column label='联动类型' align='center' prop='linkType' v-if='columns[3].visible'>
<template #default='scope'>
<dict-tag :options='dms_link_type' :value='scope.row.linkType' />
</template>
</el-table-column>
<el-table-column label='联动设备' align='center' prop='linkDeviceId'
v-if='columns[4].visible' />
<el-table-column label='联动设备功能' align='center'
prop='linkDeviceFunctionId' v-if='columns[5].visible' />
<el-table-column label='标识符' align='center' prop='linkDeviceFunctionIdentifier' v-if='columns[6].visible' />
<el-table-column label='联动设备服务参数(json)' align='center' prop='linkDeviceFunctionData'
v-if='columns[7].visible' />
<el-table-column label='操作' align='center' class-name='small-padding fixed-width'>
<template #default='scope'>
<el-tooltip content='修改' placement='top'>
<el-button link type='primary' icon='Edit' @click='handleUpdate(scope.row)'
v-hasPermi="['dms:alarmRuleLink:edit']"></el-button>
</el-tooltip>
<el-tooltip content='删除' placement='top'>
<el-button link type='primary' icon='Delete' @click='handleDelete(scope.row)'
v-hasPermi="['dms:alarmRuleLink:remove']"></el-button>
</el-tooltip>
</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-card>
<!-- 添加或修改报警规则联动信息对话框 -->
<el-dialog :title='dialog.title' v-model='dialog.visible' width='500px' append-to-body>
<el-form ref='alarmRuleLinkFormRef' :model='form' :rules='rules' label-width='130px'>
<el-form-item label='报警规则类型' prop='alarmRuleType'>
<el-radio-group v-model='form.alarmRuleType'>
<el-radio
v-for='dict in dms_alarm_rule_type'
:key='dict.value'
:value='dict.value'
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='报警规则' prop='alarmRuleId'>
<el-select v-model='form.alarmRuleId' placeholder='请选择报警规则'>
<el-option
v-for='item in alarmRuleList'
:key='item.alarmRuleId'
:label='item.alarmRuleName'
:value='item.alarmRuleId'
/>
</el-select>
</el-form-item>
<el-form-item label='联动类型' prop='linkType'>
<el-radio-group v-model='form.linkType'>
<el-radio
v-for='dict in dms_link_type'
:key='dict.value'
:value='dict.value'
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='联动设备' prop='linkDeviceId'>
<el-select v-model='form.linkDeviceId' placeholder='请选择联动设备' clearable>
<el-option
v-for='item in deviceList'
:key='item.machineId'
:label='item.machineName'
:value='item.machineId'
/>
</el-select>
</el-form-item>
<el-form-item label='联动设备功能' prop='linkDeviceFunctionId'>
<el-select v-model='form.linkDeviceFunctionId' placeholder='请选择设备模型'>
<el-option
v-for='item in deviceModeList'
:key='item.deviceModeId'
:label='item.deviceModeName'
:value='item.deviceModeId'
/>
</el-select>
</el-form-item>
<el-form-item label='标识符' prop='linkDeviceFunctionIdentifier'>
<el-input v-model='form.linkDeviceFunctionIdentifier' placeholder='请输入标识符' />
</el-form-item>
<el-form-item label='联动设备服务参数' prop='linkDeviceFunctionData'>
<el-input v-model='form.linkDeviceFunctionData' type='textarea' placeholder='请输入联动设备服务参数(json)' />
</el-form-item>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button :loading='buttonLoading' type='primary' @click='submitForm'>确 定</el-button>
<el-button @click='cancel'>取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name='AlarmRuleLink' lang='ts'>
import {
listAlarmRuleLink,
getAlarmRuleLink,
delAlarmRuleLink,
addAlarmRuleLink,
updateAlarmRuleLink
} from '@/api/dms/alarmRuleLink';
import { AlarmRuleLinkVO, AlarmRuleLinkQuery, AlarmRuleLinkForm } from '@/api/dms/alarmRuleLink/types';
import { getBaseAlarmRuleList } from '@/api/dms/alarmRule';
import { getDmsDeviceModeList } from '@/api/dms/deviceMode';
import { getDmsBaseDeviceFilesList } from '@/api/dms/dmsBaseDeviceFiles';
import { getProdBaseMachineInfoList } from '@/api/mes/prodBaseMachineInfo';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { dms_link_type, dms_alarm_rule_type } = toRefs<any>(proxy?.useDict('dms_link_type', 'dms_alarm_rule_type'));
const alarmRuleLinkList = ref<AlarmRuleLinkVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const alarmRuleLinkFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
/** 获取报警规则下拉框 */
const alarmRuleList = ref([]);
const getBaseAlarmRuleListSelect = async () => {
let res = await getBaseAlarmRuleList(null);
alarmRuleList.value = res.data;
};
/** 获取设备模型下拉框 */
const deviceModeList = ref([]);
const getDmsDeviceModeListSelect = async () => {
let res = await getDmsDeviceModeList(null);
deviceModeList.value = res.data;
};
/** 获取设备列表 */
const deviceList = ref([]);
const getDeviceListSelect = async () => {
let res = await getProdBaseMachineInfoList(null);
deviceList.value = res.data;
};
// 列显隐信息
const columns = ref<FieldOption[]>([
{ key: 0, label: `报警规则关联ID`, visible: false },
{ key: 1, label: `报警规则类型`, visible: true },
{ key: 2, label: `报警规则ID`, visible: true },
{ key: 3, label: `联动类型`, visible: true },
{ key: 4, label: `联动设备`, visible: true },
{ key: 5, label: `联动设备功能`, visible: true },
{ key: 6, label: `标识符`, visible: true },
{ key: 7, label: `联动设备服务参数(json)`, visible: true }
]);
const initFormData: AlarmRuleLinkForm = {
ruleLinkId: undefined,
alarmRuleType: undefined,
alarmRuleId: undefined,
linkType: undefined,
linkDeviceId: undefined,
linkDeviceFunctionId: undefined,
linkDeviceFunctionIdentifier: undefined,
linkDeviceFunctionData: undefined
};
const data = reactive<PageData<AlarmRuleLinkForm, AlarmRuleLinkQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
ruleLinkId: undefined,
alarmRuleType: undefined,
alarmRuleId: undefined,
linkType: undefined,
linkDeviceId: undefined,
linkDeviceFunctionId: undefined,
linkDeviceFunctionIdentifier: undefined,
linkDeviceFunctionData: undefined,
params: {}
},
rules: {
alarmRuleType: [
{ required: true, message: '报警规则类型不能为空', trigger: 'change' }
],
alarmRuleId: [
{ required: true, message: '报警规则ID不能为空', trigger: 'blur' }
],
linkType: [
{ required: true, message: '联动类型不能为空', trigger: 'change' }
],
linkDeviceId: [
{ required: true, message: '联动设备不能为空', trigger: 'blur' }
]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询报警规则联动信息列表 */
const getList = async () => {
loading.value = true;
const res = await listAlarmRuleLink(queryParams.value);
alarmRuleLinkList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
alarmRuleLinkFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: AlarmRuleLinkVO[]) => {
ids.value = selection.map(item => item.ruleLinkId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加报警规则联动信息';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: AlarmRuleLinkVO) => {
reset();
const _ruleLinkId = row?.ruleLinkId || ids.value[0];
const res = await getAlarmRuleLink(_ruleLinkId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改报警规则联动信息';
};
/** 提交按钮 */
const submitForm = () => {
alarmRuleLinkFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.ruleLinkId) {
await updateAlarmRuleLink(form.value).finally(() => buttonLoading.value = false);
} else {
await addAlarmRuleLink(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: AlarmRuleLinkVO) => {
const _ruleLinkIds = row?.ruleLinkId || ids.value;
await proxy?.$modal.confirm('是否确认删除报警规则联动信息编号为"' + _ruleLinkIds + '"的数据项').finally(() => loading.value = false);
await delAlarmRuleLink(_ruleLinkIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('dms/alarmRuleLink/export', {
...queryParams.value
}, `alarmRuleLink_${new Date().getTime()}.xlsx`);
};
onMounted(() => {
getBaseAlarmRuleListSelect();
getDmsDeviceModeListSelect();
getDeviceListSelect();
getList();
});
</script>