This commit is contained in:
sjl
2024-12-04 08:49:42 +08:00
parent 33004e081d
commit 741020fe79
9 changed files with 171 additions and 51 deletions

View File

@@ -67,14 +67,14 @@ const errordata = ref<ErrorSystem.ErrorSystemList[]>([
maxErrorValue: '±1%' maxErrorValue: '±1%'
}, },
{ {
measured: '电压波动幅值', measured: '电压波动/电压幅值',
deviceLevel: 'A', deviceLevel: 'A',
measurementType:'电压', measurementType:'电压',
condition: '', condition: '',
maxErrorValue: '±0.2%Un' maxErrorValue: '±0.2%Un'
}, },
{ {
measured: '电压波动持续时间', measured: '电压波动/持续时间',
deviceLevel: 'A', deviceLevel: 'A',
measurementType:'时间', measurementType:'时间',
condition: '', condition: '',
@@ -193,14 +193,14 @@ const errordata = ref<ErrorSystem.ErrorSystemList[]>([
maxErrorValue: '±1%' maxErrorValue: '±1%'
}, },
{ {
measured: '暂态电压幅值', measured: '电压暂降、电压暂升和短时中断/电压幅值',
deviceLevel: 'A', deviceLevel: 'A',
measurementType:'电压', measurementType:'电压',
condition: '', condition: '',
maxErrorValue: '±0.2%Un' maxErrorValue: '±0.2%Un'
}, },
{ {
measured: '暂态持续时间', measured: '电压暂降、电压暂升和短时中断/持续时间',
deviceLevel: 'A', deviceLevel: 'A',
measurementType:'时间', measurementType:'时间',
condition: '', condition: '',

View File

@@ -126,6 +126,15 @@ const handleChange = (unit: string) => {
endDate.value = new Date() endDate.value = new Date()
} }
timeUnit.value = unit timeUnit.value = unit
// 确保开始时间和结束时间不为空
if (!startDate.value) {
startDate.value = new Date()
}
if (!endDate.value) {
endDate.value = new Date()
}
emitDateChange() // 变化时也发出更新事件 emitDateChange() // 变化时也发出更新事件
updateNextButtonStatus() updateNextButtonStatus()
} }
@@ -172,7 +181,13 @@ const updateDateRange = () => {
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999 // endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
// } // }
} }
// 确保开始时间和结束时间不为空
if (!startDate.value) {
startDate.value = new Date()
}
if (!endDate.value) {
endDate.value = new Date()
}
updateNextButtonStatus() updateNextButtonStatus()
} }
@@ -285,7 +300,10 @@ const disableEndDate = (date: Date) => {
// 格式化日期yyyy-mm-dd // 格式化日期yyyy-mm-dd
function formatDate(date:Date) { function formatDate(date: Date | null): string {
if (!date) {
return '';
}
const year = date.getFullYear(); const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0');

View File

@@ -91,6 +91,22 @@ const columns = reactive<ColumnProps<Role.RoleBO>[]>([
search: { el: 'input' }, search: { el: 'input' },
minWidth: 200, minWidth: 200,
}, },
{
prop: 'type',
label: '类型',
minWidth: 200,
render: (scope) => {
const typeMap: { [key: number]: { label: string; type: string } } = {
0: { label: '超级管理员', type: 'primary' },
1: { label: '管理员角色', type: 'success' },
2: { label: '普通角色', type: 'info' },
};
const typeInfo = typeMap[scope.row.type] || { label: '未知', type: 'danger' };
return (
<el-tag type={typeInfo.type}>{typeInfo.label}</el-tag>
);
},
},
{ {
prop: 'remark', prop: 'remark',
label: '描述', label: '描述',

View File

@@ -2,8 +2,8 @@
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig"> <el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig">
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="设备台账信息"> <el-tab-pane label="设备台账信息">
<div class="form-grid"> <div >
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false"> <el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false">
<el-divider >设备信息</el-divider> <el-divider >设备信息</el-divider>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">

View File

@@ -5,6 +5,7 @@
<ProTable <ProTable
ref='proTable' ref='proTable'
:columns='columns' :columns='columns'
:style="{ height: '326px',maxHeight: '400px',overflow:'hidden'}"
> >
<!-- 表格 header 按钮 --> <!-- 表格 header 按钮 -->
<template #tableHeader='scope'> <template #tableHeader='scope'>
@@ -30,7 +31,10 @@
import { type ColumnProps } from '@/components/ProTable/interface' import { type ColumnProps } from '@/components/ProTable/interface'
import { type Monitor } from '@/api/device/interface/monitor' import { type Monitor } from '@/api/device/interface/monitor'
// 定义 props
const props = defineProps<{
MonIsShow: boolean;
}>();
// 表格配置项 // 表格配置项

View File

@@ -2,24 +2,22 @@
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig"> <el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig">
<div class="table-container"> <div class="table-container">
<el-table :data="errorData" <el-table :data="errorData"
height="500" height="500"
:header-cell-style="{ textAlign: 'center',backgroundColor: '#003078',color: '#fff' } " :header-cell-style="{ textAlign: 'center',backgroundColor: '#003078',color: '#fff' } "
:cell-style="{ textAlign: 'center' }" :cell-style="{ textAlign: 'center' }"
style="width: 100%" style="width: 100%"
:span-method="spanMethod" :span-method="spanMethod"
border border
class="custom-table"> class="custom-table">
<el-table-column prop="measured" label="被测量" /> <el-table-column prop="measured" label="被测量" />
<el-table-column prop="deviceLevel" label="检测装置级别" /> <el-table-column prop="deviceLevel" label="检测装置级别" />
<el-table-column prop="measurementType" label="测量类型" /> <el-table-column prop="measurementType" label="测量类型" />
<el-table-column prop="condition" label="测量条件" /> <el-table-column prop="condition" label="测量条件" />
<el-table-column prop="maxErrorValue" label="最大误差" /> <el-table-column prop="maxErrorValue" label="最大误差" />
</el-table> </el-table>
<div class="notes-container"> <label>注1UN测量的标称电压IN测量仪器的标称电流Uh和Ih测量值h表示谐波次数</label>
<label>1:UN:测量的标称电压;IN:测量仪器的标称电流;Uh和Ih:测量值,h表示谐波次数</label> <label>2对于数字式接入监测终端与电能质量信号采集单元联合准确度需满足本表要求</label>
<label>注2:对于数字式接入监测终端与电能质量信号采集单元联合准确度需满足本表要求</label>
</div>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
@@ -65,8 +63,9 @@ const spanMethod = ({
rowIndex, rowIndex,
columnIndex, columnIndex,
}: SpanMethodProps) => { }: SpanMethodProps) => {
if (columnIndex === 0 ) { // 检查是否为第一列 if (columnIndex === 0 ) { // 检查是否为第一列
if (rowIndex === 2 || rowIndex === 21) { // 检查是否为第三行 if (rowIndex === 2 ||rowIndex === 21) { // 检查是否为第三行
return { return {
rowspan: 2, // 合并行数 rowspan: 2, // 合并行数
colspan: 1, // 单元格列数 colspan: 1, // 单元格列数
@@ -93,6 +92,37 @@ const spanMethod = ({
}; };
} }
} }
if (columnIndex === 1 ){
if (rowIndex === 2
|| rowIndex === 8|| rowIndex === 10|| rowIndex === 12|| rowIndex === 14
|| rowIndex === 16|| rowIndex === 18
|| rowIndex === 21) {
return {
rowspan: 2,
colspan: 1,
};
}
else if (rowIndex === 3
|| rowIndex === 9|| rowIndex === 11|| rowIndex === 13|| rowIndex === 15
|| rowIndex === 17|| rowIndex === 19
|| rowIndex === 22) { // 检查是否为第四行
return {
rowspan: 0, // 不显示该单元格
colspan: 0,
};
}
// if (rowIndex === 0 ) {
// return {
// rowspan: 25,
// colspan: 1,
// };
// } else if (rowIndex != 0) { // 检查是否为第四行
// return {
// rowspan: 0, // 不显示该单元格
// colspan: 0,
// };
// }
}
else if(columnIndex === 2) { // 检查是否为第三列 else if(columnIndex === 2) { // 检查是否为第三列
if (rowIndex === 2 if (rowIndex === 2
|| rowIndex === 8|| rowIndex === 10|| rowIndex === 12|| rowIndex === 14 || rowIndex === 8|| rowIndex === 10|| rowIndex === 12|| rowIndex === 14
@@ -150,5 +180,11 @@ const props = defineProps<{
.notes-container { .notes-container {
text-align: center; text-align: center;
width: 100%; /* 确保注释容器宽度与表格一致 */
}
.notes-container label {
display: block; /* 使每个label标签上下排列 */
margin-bottom: 10px; /* 调整两个label之间的间距 */
} }
</style> </style>

View File

@@ -8,49 +8,51 @@
:header-cell-style="{ textAlign: 'center',backgroundColor: '#003078',color: '#fff' } " :header-cell-style="{ textAlign: 'center',backgroundColor: '#003078',color: '#fff' } "
:cell-style="{ textAlign: 'center' }" :cell-style="{ textAlign: 'center' }"
style="width: 100%" style="width: 100%"
:style="{ height: '250px',maxHeight: '400px',overflow:'hidden'}"
@selection-change="handleSelectionChange" > @selection-change="handleSelectionChange" >
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column prop="nextId" label="序号" width="60" /> <el-table-column prop="nextId" label="序号" width="60" />
<el-table-column prop="type" label="电能质量检测指标类型" width="181"> <el-table-column prop="type" label="电能质量检测指标类型" min-width="200">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-model="row.type" placeholder="选择指标类型" > <el-cascader :options="options" v-model="row.type"/>
<!-- <el-select v-model="row.type" placeholder="选择指标类型" >
<el-option v-for="item in dictStore.getDictData('Pq_Test_Type')" <el-option v-for="item in dictStore.getDictData('Pq_Test_Type')"
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id"/> :value="item.id"/>
</el-select> </el-select> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="起止范围" > <el-table-column label="起止范围" >
<el-table-column label="起始"> <el-table-column label="起始" width="150">
<template #default="{ row }"> <template #default="{ row }">
<el-row type="flex"> <el-row type="flex" :gutter="24">
<el-col :span="14"> <el-col :span="12">
<el-select v-model="row.startFlag" placeholder="选择起始值" style="width: 70px;"> <el-select v-model="row.startFlag" placeholder="选择起始值" style="width: 70px;">
<el-option label="无" :value="2"></el-option> <el-option label="无" :value="2"></el-option>
<el-option label=">=" :value="1"></el-option> <el-option label=">=" :value="1"></el-option>
<el-option label=">" :value="0"></el-option> <el-option label=">" :value="0"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="12">
<el-input v-model= "row.startValue" style="width: 70px;" <el-input v-model= "row.startValue" style="width: 60px;"
/> />
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="结束"> <el-table-column label="结束" width="150">
<template #default="{ row }"> <template #default="{ row }">
<el-row type="flex" > <el-row type="flex" :gutter="24" >
<el-col :span="14"> <el-col :span="12">
<el-select v-model="row.endFlag" placeholder="选择结束值" style="width: 70px;"> <el-select v-model="row.endFlag" placeholder="选择结束值" style="width: 70px;">
<el-option label="无" :value="2"></el-option> <el-option label="无" :value="2"></el-option>
<el-option label="<=" :value="1"></el-option> <el-option label="<=" :value="1"></el-option>
<el-option label="<" :value="0"></el-option> <el-option label="<" :value="0"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="12">
<el-input v-model= "row.endValue" style="width: 70px;"/> <el-input v-model= "row.endValue" style="width: 60px;"/>
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
@@ -74,7 +76,7 @@
<el-input v-model= "row.maxErrorValue" style="width: 70px;"/> <el-input v-model= "row.maxErrorValue" style="width: 70px;"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="误差类型"> <el-table-column label="误差类型" width="160">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-model="row.errorValueType" placeholder="选择误差类型"> <el-select v-model="row.errorValueType" placeholder="选择误差类型">
<el-option <el-option
@@ -101,10 +103,14 @@
import { type ErrorSystem } from '@/api/device/interface/error'; import { type ErrorSystem } from '@/api/device/interface/error';
import { useDictStore, } from '@/stores/modules/dict' import { useDictStore, } from '@/stores/modules/dict'
import {CirclePlus, Delete, EditPen,CopyDocument} from '@element-plus/icons-vue' import {CirclePlus, Delete, EditPen,CopyDocument} from '@element-plus/icons-vue'
import { FormItemRule } from 'element-plus'; import { type CascaderOption, type FormItemRule } from 'element-plus';
import { onMounted, type PropType, Ref, ref, watch } from 'vue'; import { onMounted, type PropType, Ref, ref, watch } from 'vue';
import { defineEmits } from 'vue'; import { defineEmits } from 'vue';
import ProTable from '@/components/ProTable/index.vue' import ProTable from '@/components/ProTable/index.vue'
import {
getDictTreeList,
} from '@/api/system/dictionary/dictTree'
import { type Dict } from '@/api/system/dictionary/interface';
const emit = defineEmits(['updateTableData']); const emit = defineEmits(['updateTableData']);
const multipleSelection = ref<number[]>([]) const multipleSelection = ref<number[]>([])
const dictStore = useDictStore() const dictStore = useDictStore()
@@ -115,8 +121,46 @@
} }
}); });
const options: Ref<CascaderOption[]> = ref([]); // 修改这里
onMounted(async () => {
const dictCode = ''; // 替换为实际需要的字典代码
const resDictTree: Dict.ResDictTree = {
name: dictCode,
id: '',
pid: '',
pids: '',
code: '',
sort: 0
};
const result = await getDictTreeList(resDictTree);
const allOptions = convertToOptions(result.data as Dict.ResDictTree[]);
// 提取第二层节点
const secondLevelOptions: any[] = [];
allOptions.forEach(option => {
if (option.children && option.children.length > 0) {
secondLevelOptions.push(...option.children);
}
});
// 将第二层节点赋值给 options.value
options.value = secondLevelOptions;
})
// 转换函数
const convertToOptions = (dictTree: Dict.ResDictTree[]): CascaderOption[] => {
return dictTree.map(item => ({
value: item.id,
label: item.name,
children: item.children ? convertToOptions(item.children) : undefined
}));
};
// 监听 props.tableData 的变化,确保每次数据变化时都重新设置 nextId // 监听 props.tableData 的变化,确保每次数据变化时都重新设置 nextId
watch(() => props.tableData, (newTableData) => { watch(() => props.tableData, async (newTableData) => {
for (let i = 0; i < newTableData.length; i++) { for (let i = 0; i < newTableData.length; i++) {
newTableData[i].nextId = i + 1; newTableData[i].nextId = i + 1;
} }
@@ -142,6 +186,7 @@ watch(() => props.tableData, (newTableData) => {
maxErrorValue: 0, maxErrorValue: 0,
errorValueType: "" errorValueType: ""
}; };
emit('updateTableData', [...props.tableData, newRow]); emit('updateTableData', [...props.tableData, newRow]);
}; };

View File

@@ -1,29 +1,29 @@
<template> <template>
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig"> <el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig" >
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="基础信息"> <el-tab-pane label="基础信息">
<div class="form-grid"> <div class="form-grid">
<el-form :model="formContent" ref='dialogFormRef' :rules='rules'> <el-form :model="formContent" ref='dialogFormRef' :rules='rules'>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="误差体系名称" prop="name" :label-width="110"> <el-form-item label="误差体系名称" prop="name" :label-width="150">
<el-input v-model='formContent.name' placeholder="标准号+年份+设备等级"/> <el-input v-model='formContent.name' placeholder="标准号+年份+设备等级"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="参照标准名称" prop="standardName" :label-width="110"> <el-form-item label="参照标准名称" prop="standardName" :label-width="150">
<el-input v-model='formContent.standardName'/> <el-input v-model='formContent.standardName'/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="发布时间" prop="standardTime" :label-width="110"> <el-form-item label="发布时间" prop="standardTime" :label-width="150">
<el-input v-model="formContent.standardTime" /> <el-input v-model="formContent.standardTime" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" > <el-row :gutter="24" >
<el-col :span="8"> <el-col :span="8">
<el-form-item label="适用设备等级" prop="devLevel" :label-width="110"> <el-form-item label="适用设备等级" prop="devLevel" :label-width="150">
<el-select v-model='formContent.devLevel' placeholder="请选择设备等级"> <el-select v-model='formContent.devLevel' placeholder="请选择设备等级">
<el-option <el-option
v-for="item in dictStore.getDictData('Dev_Level')" v-for="item in dictStore.getDictData('Dev_Level')"
@@ -36,7 +36,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="状态" prop="enable" :label-width="110"> <el-form-item label="状态" prop="enable" :label-width="150">
<el-select v-model='formContent.enable' placeholder="请选择状态"> <el-select v-model='formContent.enable' placeholder="请选择状态">
<el-option label="启用" :value="1"></el-option> <el-option label="启用" :value="1"></el-option>
<el-option label="不启用" :value="0"></el-option> <el-option label="不启用" :value="0"></el-option>
@@ -137,6 +137,7 @@
try { try {
dialogFormRef.value?.validate(async (valid: boolean) => { dialogFormRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
formContent.value.pqErrSysDtlsList = tableData.value formContent.value.pqErrSysDtlsList = tableData.value
if (formContent.value.id) { if (formContent.value.id) {
await updatePqErrSys(formContent.value); await updatePqErrSys(formContent.value);

View File

@@ -1,6 +1,6 @@
<template> <template>
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig" > <el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig" >
<div height="800"> <div >
<el-form :model="formContent" ref='dialogFormRef' :rules='rules' > <el-form :model="formContent" ref='dialogFormRef' :rules='rules' >
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="8"> <el-col :span="8">