fix(compiler): 格式化代码
This commit is contained in:
parent
c641ad14bc
commit
e40b901205
|
@ -1,7 +1,7 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
/dist
|
/dist
|
||||||
|
yarn.lock
|
||||||
|
|
||||||
# local env files
|
# local env files
|
||||||
.env.local
|
.env.local
|
||||||
|
@ -21,4 +21,4 @@ pnpm-debug.log*
|
||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
!/yarn.lock
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
"xlsx": "^0.18.5"
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@typescript-eslint/eslint-plugin": "^8.18.0",
|
||||||
"@vitejs/plugin-vue": "^4.1.0",
|
"@vitejs/plugin-vue": "^4.1.0",
|
||||||
"@vue/compiler-sfc": "^3.2.47",
|
"@vue/compiler-sfc": "^3.2.47",
|
||||||
"eslint": "^8.38.0",
|
"eslint": "^8.38.0",
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
<LockScreen v-if="themeConfig.isLockScreen" />
|
<LockScreen v-if="themeConfig.isLockScreen" />
|
||||||
<Setings ref="setingsRef" v-show="setLockScreen" />
|
<Setings ref="setingsRef" v-show="setLockScreen" />
|
||||||
<CloseFull v-if="!themeConfig.isLockScreen" />
|
<CloseFull v-if="!themeConfig.isLockScreen" />
|
||||||
<!-- <Upgrade v-if="getVersion" />-->
|
<!-- <Upgrade v-if="getVersion" />-->
|
||||||
<!-- <Sponsors />-->
|
<!-- <Sponsors />-->
|
||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table-box">
|
<div class="table-box">
|
||||||
<el-table ref="deviceDataTableRef" :data="activeDeviceConfig.result" border size="small" height="100%" :style="{ width: tabelBox + 'px' }" empty-text="配置为空">
|
<el-table
|
||||||
|
ref="deviceDataTableRef"
|
||||||
|
:data="activeDeviceConfig.result"
|
||||||
|
border
|
||||||
|
size="small"
|
||||||
|
height="100%"
|
||||||
|
:style="{ width: tabelBox + 'px' }"
|
||||||
|
empty-text="配置为空"
|
||||||
|
>
|
||||||
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
||||||
<el-table-column prop="id" label="设备ID_数据ID" align="center">
|
<el-table-column prop="id" label="设备ID_数据ID" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
@ -51,11 +59,11 @@
|
||||||
<el-table-column prop="dataValue" label="当前值" align="center" />
|
<el-table-column prop="dataValue" label="当前值" align="center" />
|
||||||
<el-table-column prop="dataUnit" label="单位" align="center" />
|
<el-table-column prop="dataUnit" label="单位" align="center" />
|
||||||
<el-table-column prop="time" label="时间" align="center" />
|
<el-table-column prop="time" label="时间" align="center" />
|
||||||
<!-- <el-table-column label="操作" width="55" fixed="right" align="center">-->
|
<!-- <el-table-column label="操作" width="55" fixed="right" align="center">-->
|
||||||
<!-- <template #default="scope">-->
|
<!-- <template #default="scope">-->
|
||||||
<!-- <el-button link type="danger" size="small" @click.stop="delDeviceDataConfig(scope.$index)">删除</el-button>-->
|
<!-- <el-button link type="danger" size="small" @click.stop="delDeviceDataConfig(scope.$index)">删除</el-button>-->
|
||||||
<!-- </template>-->
|
<!-- </template>-->
|
||||||
<!-- </el-table-column>-->
|
<!-- </el-table-column>-->
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,12 +73,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, onUnmounted } from 'vue';
|
import { ref, onMounted, onUnmounted } from 'vue';
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import {
|
import { endDeviceCollect, getDeviceCollectli, getDeviceEquipli, startDeviceCollect } from '/@/api/gateway/collectdatamonitor';
|
||||||
endDeviceCollect,
|
|
||||||
getDeviceCollectli,
|
|
||||||
getDeviceEquipli,
|
|
||||||
startDeviceCollect
|
|
||||||
} from "/@/api/gateway/collectdatamonitor";
|
|
||||||
|
|
||||||
const deviceConfigTableRef = ref();
|
const deviceConfigTableRef = ref();
|
||||||
const deviceDataTableRef = ref();
|
const deviceDataTableRef = ref();
|
||||||
|
@ -83,27 +86,27 @@ const ActiveRowIndex = ref(0);
|
||||||
const activeDeviceConfig = ref({
|
const activeDeviceConfig = ref({
|
||||||
equipId: '',
|
equipId: '',
|
||||||
status: false,
|
status: false,
|
||||||
result: []
|
result: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const getDeviceDataList = id => {
|
const getDeviceDataList = (id) => {
|
||||||
// console.log('获取设备列表')
|
// console.log('获取设备列表')
|
||||||
getDeviceCollectli(id)
|
getDeviceCollectli(id)
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
//缓存上下行主题
|
//缓存上下行主题
|
||||||
activeDeviceConfig.value = {
|
activeDeviceConfig.value = {
|
||||||
equipId: response.data.equipId || '',
|
equipId: response.data.equipId || '',
|
||||||
status: response.data.status || false,
|
status: response.data.status || false,
|
||||||
result: response.data.result || []
|
result: response.data.result || [],
|
||||||
};
|
};
|
||||||
// activeDeviceResult.value = response.data.result || []
|
// activeDeviceResult.value = response.data.result || []
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
|
@ -113,7 +116,7 @@ const getDeviceDataList = id => {
|
||||||
const getDeviceList = () => {
|
const getDeviceList = () => {
|
||||||
// console.log('获取设备列表')
|
// console.log('获取设备列表')
|
||||||
getDeviceEquipli({})
|
getDeviceEquipli({})
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
//缓存上下行主题
|
//缓存上下行主题
|
||||||
|
@ -126,7 +129,7 @@ const getDeviceList = () => {
|
||||||
activeDeviceConfig.value = {
|
activeDeviceConfig.value = {
|
||||||
equipId: '',
|
equipId: '',
|
||||||
starus: false,
|
starus: false,
|
||||||
result: []
|
result: [],
|
||||||
};
|
};
|
||||||
// activeDeviceResult.value = []
|
// activeDeviceResult.value = []
|
||||||
}
|
}
|
||||||
|
@ -134,7 +137,7 @@ const getDeviceList = () => {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
|
@ -145,13 +148,14 @@ const getDeviceConfig = () => {
|
||||||
getDeviceDataList(deviceList.value[ActiveRowIndex.value].equipId);
|
getDeviceDataList(deviceList.value[ActiveRowIndex.value].equipId);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleBeforeChange = index => {
|
const handleBeforeChange = (index) => {
|
||||||
console.log('e', index);
|
console.log('e', index);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let deviceObj = deviceList.value[index];
|
let deviceObj = deviceList.value[index];
|
||||||
console.log('deviceObj', deviceObj.status);
|
console.log('deviceObj', deviceObj.status);
|
||||||
if (deviceObj.status) {
|
if (deviceObj.status) {
|
||||||
endDeviceCollect(deviceObj.equipId).then(response => {
|
endDeviceCollect(deviceObj.equipId)
|
||||||
|
.then((response) => {
|
||||||
console.log('response', response);
|
console.log('response', response);
|
||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
// 请求成功且状态为 ok,允许改变开关状态
|
// 请求成功且状态为 ok,允许改变开关状态
|
||||||
|
@ -169,13 +173,14 @@ const handleBeforeChange = index => {
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 请求失败,阻止改变开关状态
|
// 请求失败,阻止改变开关状态
|
||||||
ElMessage.error(error.data.message);
|
ElMessage.error(error.data.message);
|
||||||
reject();
|
reject();
|
||||||
});
|
});
|
||||||
}else{
|
} else {
|
||||||
startDeviceCollect(deviceObj.equipId).then(response => {
|
startDeviceCollect(deviceObj.equipId)
|
||||||
|
.then((response) => {
|
||||||
console.log('response', response);
|
console.log('response', response);
|
||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
// 请求成功且状态为 ok,允许改变开关状态
|
// 请求成功且状态为 ok,允许改变开关状态
|
||||||
|
@ -193,7 +198,7 @@ const handleBeforeChange = index => {
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 请求失败,阻止改变开关状态
|
// 请求失败,阻止改变开关状态
|
||||||
ElMessage.error(error.data.message);
|
ElMessage.error(error.data.message);
|
||||||
reject();
|
reject();
|
||||||
|
@ -203,7 +208,7 @@ const handleBeforeChange = index => {
|
||||||
};
|
};
|
||||||
|
|
||||||
//选择设备配置
|
//选择设备配置
|
||||||
const deviceConfigClick = e => {
|
const deviceConfigClick = (e) => {
|
||||||
getDeviceDataList(e.equipId);
|
getDeviceDataList(e.equipId);
|
||||||
deviceConfigTableRef.value.toggleRowSelection(e);
|
deviceConfigTableRef.value.toggleRowSelection(e);
|
||||||
ActiveRowIndex.value = deviceList.value.indexOf(e);
|
ActiveRowIndex.value = deviceList.value.indexOf(e);
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
<div class="btn-list">
|
<div class="btn-list">
|
||||||
<div class="btn-list-left">
|
<div class="btn-list-left">
|
||||||
<el-button type="primary" @click="addDeviceConfig">新增配置</el-button>
|
<el-button type="primary" @click="addDeviceConfig">新增配置</el-button>
|
||||||
<!-- <el-button type="danger" @click="getDeviceConfig">删除</el-button>-->
|
<!-- <el-button type="danger" @click="getDeviceConfig">删除</el-button>-->
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-list-right">
|
<div class="btn-list-right">
|
||||||
<!-- <el-button type="primary" @click="getDeviceConfig">导出</el-button>-->
|
<!-- <el-button type="primary" @click="getDeviceConfig">导出</el-button>-->
|
||||||
<!-- <el-button type="primary" @click="getDeviceConfig">导入</el-button>-->
|
<!-- <el-button type="primary" @click="getDeviceConfig">导入</el-button>-->
|
||||||
<el-button type="primary" @click="getDeviceConfig">获取配置</el-button>
|
<el-button type="primary" @click="getDeviceConfig">获取配置</el-button>
|
||||||
<el-button type="primary" @click="setDeviceConfig">设置配置</el-button>
|
<el-button type="primary" @click="setDeviceConfig">设置配置</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -22,55 +22,50 @@
|
||||||
border
|
border
|
||||||
height="187"
|
height="187"
|
||||||
:row-class-name="tableRowClassName"
|
:row-class-name="tableRowClassName"
|
||||||
:style="{ width: tabelBox + 'px',background:'#f2f2f2' }"
|
:style="{ width: tabelBox + 'px', background: '#f2f2f2' }"
|
||||||
empty-text="配置为空"
|
empty-text="配置为空"
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" align="center" width="60" />
|
<el-table-column type="index" label="序号" align="center" width="60" />
|
||||||
<el-table-column prop="PlatformIp" label="平台地址" >
|
<el-table-column prop="PlatformIp" label="平台地址">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.PlatformIp" placeholder="请输入平台地址" />
|
<el-input v-model="scope.row.PlatformIp" placeholder="请输入平台地址" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="type" label="上报格式" >
|
<el-table-column prop="type" label="上报格式">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-select v-model="scope.row.type" placeholder="请选择上报格式">
|
<el-select v-model="scope.row.type" placeholder="请选择上报格式">
|
||||||
<el-option
|
<el-option v-for="item in uploadType" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
v-for="item in uploadType"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="mqtt.user" label="用户名" >
|
<el-table-column prop="mqtt.user" label="用户名">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.mqtt.user" placeholder="请输入用户名" />
|
<el-input v-model="scope.row.mqtt.user" placeholder="请输入用户名" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="mqtt.passwd" label="密码" >
|
<el-table-column prop="mqtt.passwd" label="密码">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input type="password" show-password v-model="scope.row.mqtt.passwd" placeholder="请输入密码" />
|
<el-input type="password" show-password v-model="scope.row.mqtt.passwd" placeholder="请输入密码" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="mqtt.isUseSsl" label="ssl" >
|
<el-table-column prop="mqtt.isUseSsl" label="ssl">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-switch v-model="scope.row.mqtt.isUseSsl" />
|
<el-switch v-model="scope.row.mqtt.isUseSsl" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="mqtt.isUseSslConf" label="ssl文件" >
|
<el-table-column prop="mqtt.isUseSslConf" label="ssl文件">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-switch v-model="scope.row.mqtt.isUseSslConf" />
|
<el-switch v-model="scope.row.mqtt.isUseSslConf" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="pushConf.isUseResumeBrokenTransfer" label="断点续存" >
|
<el-table-column prop="pushConf.isUseResumeBrokenTransfer" label="断点续存">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-switch v-model="scope.row.pushConf.isUseResumeBrokenTransfer" />
|
<el-switch v-model="scope.row.pushConf.isUseResumeBrokenTransfer" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="tasks" label="任务ID" >
|
<el-table-column prop="tasks" label="任务ID">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{scope.row.tasks?scope.row.tasks.join():''}}
|
{{ scope.row.tasks ? scope.row.tasks.join() : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="140" align="center">
|
<el-table-column label="操作" width="140" align="center">
|
||||||
|
@ -93,17 +88,17 @@
|
||||||
height="187"
|
height="187"
|
||||||
:row-class-name="tableRowClassName"
|
:row-class-name="tableRowClassName"
|
||||||
@row-click="taskConfigClick"
|
@row-click="taskConfigClick"
|
||||||
:style="{ width: tabelBox + 'px',background:'#f2f2f2' }"
|
:style="{ width: tabelBox + 'px', background: '#f2f2f2' }"
|
||||||
empty-text="配置为空"
|
empty-text="配置为空"
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" align="center" width="60" />
|
<el-table-column type="index" label="序号" align="center" width="60" />
|
||||||
<el-table-column prop="taskId" label="任务ID" align="center">
|
<el-table-column prop="taskId" label="任务ID" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{scope.row.taskId}}
|
{{ scope.row.taskId }}
|
||||||
<!-- <el-input v-model="scope.row.taskId" placeholder="请输入任务ID" />-->
|
<!-- <el-input v-model="scope.row.taskId" placeholder="请输入任务ID" />-->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="uploadMode" label="上报策略" >
|
<el-table-column prop="uploadMode" label="上报策略">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-autocomplete
|
<el-autocomplete
|
||||||
v-model="scope.row.uploadMode"
|
v-model="scope.row.uploadMode"
|
||||||
|
@ -118,7 +113,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="data-config">
|
<div class="data-config">
|
||||||
<h2>上报测点 {{activeDeviceConfig.taskId}}</h2>
|
<h2>上报测点 {{ activeDeviceConfig.taskId }}</h2>
|
||||||
<div class="table-box">
|
<div class="table-box">
|
||||||
<el-table
|
<el-table
|
||||||
:data="activeDeviceConfig.dataIdEntire"
|
:data="activeDeviceConfig.dataIdEntire"
|
||||||
|
@ -130,19 +125,14 @@
|
||||||
empty-text="配置为空"
|
empty-text="配置为空"
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
||||||
<el-table-column prop="equipId" label="设备ID" align="center"/>
|
<el-table-column prop="equipId" label="设备ID" align="center" />
|
||||||
<el-table-column prop="idInfo[0].id" label="数据ID" align="center"/>
|
<el-table-column prop="idInfo[0].id" label="数据ID" align="center" />
|
||||||
<el-table-column prop="idInfo[0].uploadMode" label="上报策略" align="center"/>
|
<el-table-column prop="idInfo[0].uploadMode" label="上报策略" align="center" />
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog v-model="collectionModelShow" title="加解密配置" width="500" :before-close="handleClose">
|
||||||
v-model="collectionModelShow"
|
|
||||||
title="加解密配置"
|
|
||||||
width="500"
|
|
||||||
:before-close="handleClose"
|
|
||||||
>
|
|
||||||
<el-form ref="collectionRef" :model="collectionForm" label-width="auto" status-icon>
|
<el-form ref="collectionRef" :model="collectionForm" label-width="auto" status-icon>
|
||||||
<h3>加密算法配置</h3>
|
<h3>加密算法配置</h3>
|
||||||
<el-form-item label="启动">
|
<el-form-item label="启动">
|
||||||
|
@ -248,21 +238,17 @@
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="collectionModelShow = false">取消</el-button>
|
<el-button @click="collectionModelShow = false">取消</el-button>
|
||||||
<el-button type="primary" @click="editCollection">
|
<el-button type="primary" @click="editCollection"> 确认 </el-button>
|
||||||
确认
|
|
||||||
</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, ref, onMounted, onUnmounted, computed, watch } from "vue"
|
import { reactive, ref, onMounted, onUnmounted, computed, watch } from 'vue';
|
||||||
import { ElMessage, ElMessageBox } from "element-plus"
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||||
import {getPlatformConf, setPlatformConf} from "/@/api/gateway/northboundtask";
|
import { getPlatformConf, setPlatformConf } from '/@/api/gateway/northboundtask';
|
||||||
|
|
||||||
//上报策略
|
//上报策略
|
||||||
const uploadModeList = ref([
|
const uploadModeList = ref([
|
||||||
|
@ -270,171 +256,162 @@ const uploadModeList = ref([
|
||||||
{ value: 'change 10', link: 'change 10' },
|
{ value: 'change 10', link: 'change 10' },
|
||||||
{ value: 'timer 10 || change 10', link: 'timer 10 || change 10' },
|
{ value: 'timer 10 || change 10', link: 'timer 10 || change 10' },
|
||||||
{ value: 'label LD200 up', link: 'label LD200 up' },
|
{ value: 'label LD200 up', link: 'label LD200 up' },
|
||||||
])
|
]);
|
||||||
|
|
||||||
const querySearch = (queryString, cb) => {
|
const querySearch = (queryString, cb) => {
|
||||||
const results = queryString
|
const results = queryString ? uploadModeList.value.filter(createFilter(queryString)) : uploadModeList.value;
|
||||||
? uploadModeList.value.filter(createFilter(queryString))
|
|
||||||
: uploadModeList.value
|
|
||||||
// call callback function to return suggestions
|
// call callback function to return suggestions
|
||||||
cb(results)
|
cb(results);
|
||||||
}
|
};
|
||||||
const createFilter = (queryString) => {
|
const createFilter = (queryString) => {
|
||||||
return (restaurant) => {
|
return (restaurant) => {
|
||||||
return (
|
return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
|
||||||
restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
|
};
|
||||||
)
|
};
|
||||||
}
|
|
||||||
}
|
|
||||||
//北向任务列表(后面换请求获取)
|
//北向任务列表(后面换请求获取)
|
||||||
const taskList = ref([
|
const taskList = ref([]);
|
||||||
]);
|
|
||||||
const platConfigTableRef = ref();
|
const platConfigTableRef = ref();
|
||||||
const deviceDataTableRef = ref();
|
const deviceDataTableRef = ref();
|
||||||
const tabelBox = ref(884)
|
const tabelBox = ref(884);
|
||||||
const platConfigList = ref([])
|
const platConfigList = ref([]);
|
||||||
|
|
||||||
const uploadType = ref([
|
const uploadType = ref([
|
||||||
{ label: 'DT-MQTT-DEFAULT', value: 'DT-MQTT-DEFAULT'},
|
{ label: 'DT-MQTT-DEFAULT', value: 'DT-MQTT-DEFAULT' },
|
||||||
{ label: 'DT-MQTT-DEBUG', value: 'DT-MQTT-DEBUG'},
|
{ label: 'DT-MQTT-DEBUG', value: 'DT-MQTT-DEBUG' },
|
||||||
{ label: 'HN-MQTT-BJ', value: 'HN-MQTT-BJ'},
|
{ label: 'HN-MQTT-BJ', value: 'HN-MQTT-BJ' },
|
||||||
{ label: 'SC-MQTT-DEFAULT', value: 'SC-MQTT-DEFAULT'},
|
{ label: 'SC-MQTT-DEFAULT', value: 'SC-MQTT-DEFAULT' },
|
||||||
{ label: 'WG-MQTT-PuPu', value: 'WG-MQTT-PuPu'},
|
{ label: 'WG-MQTT-PuPu', value: 'WG-MQTT-PuPu' },
|
||||||
{ label: 'WG-MQTT-TengSheng', value: 'WG-MQTT-TengSheng'},
|
{ label: 'WG-MQTT-TengSheng', value: 'WG-MQTT-TengSheng' },
|
||||||
])
|
]);
|
||||||
//新增配置
|
//新增配置
|
||||||
const addDeviceConfig = () => {
|
const addDeviceConfig = () => {
|
||||||
let newDeviceConfig = {
|
let newDeviceConfig = {
|
||||||
"PlatformIp": "",
|
PlatformIp: '',
|
||||||
"tasks": ["T1", "T2", "T3", "T4", "T5"],
|
tasks: ['T1', 'T2', 'T3', 'T4', 'T5'],
|
||||||
"type": "",
|
type: '',
|
||||||
"mqtt": {
|
mqtt: {
|
||||||
"user": "",
|
user: '',
|
||||||
"passwd": "",
|
passwd: '',
|
||||||
"isUseSsl": false,
|
isUseSsl: false,
|
||||||
"isUseSslConf": false,
|
isUseSslConf: false,
|
||||||
"sslConf": {
|
sslConf: {
|
||||||
"localCertificate_file": "/etc/custom/sslConf/pupu_core_3501000001.pem",
|
localCertificate_file: '/etc/custom/sslConf/pupu_core_3501000001.pem',
|
||||||
"privateKey_file": "/etc/custom/sslConf/pupu_core_3501000001.prv"
|
privateKey_file: '/etc/custom/sslConf/pupu_core_3501000001.prv',
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"pushConf": {
|
|
||||||
"isRun": true,
|
|
||||||
"isUseResumeBrokenTransfer": false,
|
|
||||||
"broken": {
|
|
||||||
"resume": { "intervalTime_ms": 1000 },
|
|
||||||
"filter": {
|
|
||||||
"filter_s": 600,
|
|
||||||
"relevanceTaskId": ["T1", "T2", "T3", "T4", "T5"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"encrypt_decrypt": {
|
pushConf: {
|
||||||
"encrypt_1": {
|
isRun: true,
|
||||||
"algorithm": "AES",
|
isUseResumeBrokenTransfer: false,
|
||||||
"param": {
|
broken: {
|
||||||
"mode": "CBC",
|
resume: { intervalTime_ms: 1000 },
|
||||||
"key": "0123456789abcdef",
|
filter: {
|
||||||
"ivec": "0123456789abcdef",
|
filter_s: 600,
|
||||||
"bits": 128
|
relevanceTaskId: ['T1', 'T2', 'T3', 'T4', 'T5'],
|
||||||
},
|
},
|
||||||
"enable": false
|
|
||||||
},
|
},
|
||||||
"decrypt_1": {
|
|
||||||
"algorithm": "AES",
|
|
||||||
"param": {
|
|
||||||
"mode": "CBC",
|
|
||||||
"key": "0123456789abcdef",
|
|
||||||
"ivec": "0123456789abcdef",
|
|
||||||
"bits": 128
|
|
||||||
},
|
},
|
||||||
"enable": false
|
encrypt_decrypt: {
|
||||||
}
|
encrypt_1: {
|
||||||
}
|
algorithm: 'AES',
|
||||||
|
param: {
|
||||||
|
mode: 'CBC',
|
||||||
|
key: '0123456789abcdef',
|
||||||
|
ivec: '0123456789abcdef',
|
||||||
|
bits: 128,
|
||||||
|
},
|
||||||
|
enable: false,
|
||||||
|
},
|
||||||
|
decrypt_1: {
|
||||||
|
algorithm: 'AES',
|
||||||
|
param: {
|
||||||
|
mode: 'CBC',
|
||||||
|
key: '0123456789abcdef',
|
||||||
|
ivec: '0123456789abcdef',
|
||||||
|
bits: 128,
|
||||||
|
},
|
||||||
|
enable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
console.log("platConfigList.value",platConfigTableRef.value)
|
console.log('platConfigList.value', platConfigTableRef.value);
|
||||||
platConfigList.value.push(newDeviceConfig);
|
platConfigList.value.push(newDeviceConfig);
|
||||||
}
|
};
|
||||||
|
|
||||||
//删除配置
|
//删除配置
|
||||||
const delDeviceConfig = (index) => {
|
const delDeviceConfig = (index) => {
|
||||||
console.log("当前点击的行号", index);
|
console.log('当前点击的行号', index);
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm('确认要删除该设备配置吗?', '告警', {
|
||||||
'确认要删除该设备配置吗?',
|
|
||||||
'告警',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}
|
})
|
||||||
)
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
platConfigList.value.splice(index, 1);
|
platConfigList.value.splice(index, 1);
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '删除成功',
|
message: '删除成功',
|
||||||
})
|
});
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
message: '取消删除',
|
message: '取消删除',
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
const getDeviceConfig = () => {
|
const getDeviceConfig = () => {
|
||||||
console.log('获取配置')
|
console.log('获取配置');
|
||||||
getPlatformConf({})
|
getPlatformConf({})
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
console.log(response); // 打印响应数据
|
console.log(response); // 打印响应数据
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
//缓存上下行主题
|
//缓存上下行主题
|
||||||
platConfigList.value = response.data.PlatformPar || [];
|
platConfigList.value = response.data.PlatformPar || [];
|
||||||
|
|
||||||
taskList.value = response.data.tasks.map(item=>{
|
taskList.value =
|
||||||
if(item.dataIdEntire!=[]){
|
response.data.tasks.map((item) => {
|
||||||
|
if (item.dataIdEntire != []) {
|
||||||
let dataIdEntireList = [];
|
let dataIdEntireList = [];
|
||||||
item.dataIdEntire.forEach(val=>{
|
item.dataIdEntire.forEach((val) => {
|
||||||
val.idInfo.forEach(info=>{
|
val.idInfo.forEach((info) => {
|
||||||
dataIdEntireList.push({
|
dataIdEntireList.push({
|
||||||
equipId: val.equipId,
|
equipId: val.equipId,
|
||||||
idInfo:[info]
|
idInfo: [info],
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
item.dataIdEntire = dataIdEntireList;
|
item.dataIdEntire = dataIdEntireList;
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}) || [];
|
}) || [];
|
||||||
// taskList.value = taskDataList;
|
// taskList.value = taskDataList;
|
||||||
console.log("格式化后数据",taskList.value)
|
console.log('格式化后数据', taskList.value);
|
||||||
if(!platConfigList.value.length){
|
if (!platConfigList.value.length) {
|
||||||
addDeviceConfig()
|
addDeviceConfig();
|
||||||
}
|
}
|
||||||
if(platConfigList.value.length){
|
if (platConfigList.value.length) {
|
||||||
if(platConfigList.value.length>ActiveRowIndex.value){
|
if (platConfigList.value.length > ActiveRowIndex.value) {
|
||||||
activeDeviceConfig.value = platConfigList.value[ActiveRowIndex.value];
|
activeDeviceConfig.value = platConfigList.value[ActiveRowIndex.value];
|
||||||
}else{
|
} else {
|
||||||
activeDeviceConfig.value = platConfigList.value[0];
|
activeDeviceConfig.value = platConfigList.value[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
const setDeviceConfig = () => {
|
const setDeviceConfig = () => {
|
||||||
console.log('提交配置',platConfigList.value)
|
console.log('提交配置', platConfigList.value);
|
||||||
setPlatformConf({PlatformPar: platConfigList.value,tasks:taskList.value})
|
setPlatformConf({ PlatformPar: platConfigList.value, tasks: taskList.value })
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
console.log(response); // 打印响应数据
|
console.log(response); // 打印响应数据
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
|
@ -443,12 +420,12 @@ const setDeviceConfig = () => {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
//当选中索引
|
//当选中索引
|
||||||
const ActiveRowIndex = ref(0);
|
const ActiveRowIndex = ref(0);
|
||||||
|
@ -457,116 +434,108 @@ const collectionModelShow = ref(false);
|
||||||
const collectionRef = ref();
|
const collectionRef = ref();
|
||||||
const collectionForm = ref({
|
const collectionForm = ref({
|
||||||
// 加密配置
|
// 加密配置
|
||||||
"encrypt_1": {
|
encrypt_1: {
|
||||||
// 加密算法
|
// 加密算法
|
||||||
"algorithm": "AES",
|
algorithm: 'AES',
|
||||||
// 加密参数
|
// 加密参数
|
||||||
"param": {
|
param: {
|
||||||
"mode": "CBC",
|
mode: 'CBC',
|
||||||
"key": "0123456789abcdef",
|
key: '0123456789abcdef',
|
||||||
"ivec": "0123456789abcdef",
|
ivec: '0123456789abcdef',
|
||||||
"bits": 128
|
bits: 128,
|
||||||
},
|
},
|
||||||
// 是否启用加密
|
// 是否启用加密
|
||||||
"enable": false
|
enable: false,
|
||||||
},
|
},
|
||||||
// 解密配置
|
// 解密配置
|
||||||
"decrypt_1": {
|
decrypt_1: {
|
||||||
// 解密算法
|
// 解密算法
|
||||||
"algorithm": "AES",
|
algorithm: 'AES',
|
||||||
// 解密参数
|
// 解密参数
|
||||||
"param": {
|
param: {
|
||||||
"mode": "CBC",
|
mode: 'CBC',
|
||||||
"key": "0123456789abcdef",
|
key: '0123456789abcdef',
|
||||||
"ivec": "0123456789abcdef",
|
ivec: '0123456789abcdef',
|
||||||
"bits": 128
|
bits: 128,
|
||||||
},
|
},
|
||||||
// 是否启用解密
|
// 是否启用解密
|
||||||
"enable": false
|
enable: false,
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
//打开采集配置弹窗
|
//打开采集配置弹窗
|
||||||
const openCollectionModel = (row) => {
|
const openCollectionModel = (row) => {
|
||||||
console.log("当前采集",row)
|
console.log('当前采集', row);
|
||||||
collectionForm.value = {
|
collectionForm.value = {
|
||||||
"encrypt_1": row.encrypt_decrypt.encrypt_1,
|
encrypt_1: row.encrypt_decrypt.encrypt_1,
|
||||||
"decrypt_1": row.encrypt_decrypt.decrypt_1
|
decrypt_1: row.encrypt_decrypt.decrypt_1,
|
||||||
};
|
};
|
||||||
collectionModelShow.value = true;
|
collectionModelShow.value = true;
|
||||||
}
|
};
|
||||||
|
|
||||||
const editCollection = () => {
|
const editCollection = () => {
|
||||||
platConfigList.value[ActiveRowIndex.value].encrypt_decrypt.encrypt_1 = collectionForm.value.encrypt_1;
|
platConfigList.value[ActiveRowIndex.value].encrypt_decrypt.encrypt_1 = collectionForm.value.encrypt_1;
|
||||||
platConfigList.value[ActiveRowIndex.value].encrypt_decrypt.decrypt_1 = collectionForm.value.decrypt_1;
|
platConfigList.value[ActiveRowIndex.value].encrypt_decrypt.decrypt_1 = collectionForm.value.decrypt_1;
|
||||||
collectionModelShow.value = false;
|
collectionModelShow.value = false;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const activeDeviceConfig = ref({
|
const activeDeviceConfig = ref({
|
||||||
"PlatformIp": "",
|
PlatformIp: '',
|
||||||
"tasks": ["T1", "T2", "T3", "T4", "T5"],
|
tasks: ['T1', 'T2', 'T3', 'T4', 'T5'],
|
||||||
"type": "",
|
type: '',
|
||||||
"mqtt": {
|
mqtt: {
|
||||||
"user": "",
|
user: '',
|
||||||
"passwd": "",
|
passwd: '',
|
||||||
"isUseSsl": false,
|
isUseSsl: false,
|
||||||
"isUseSslConf": false,
|
isUseSslConf: false,
|
||||||
"sslConf": {
|
sslConf: {
|
||||||
"localCertificate_file": "/etc/custom/sslConf/pupu_core_3501000001.pem",
|
localCertificate_file: '/etc/custom/sslConf/pupu_core_3501000001.pem',
|
||||||
"privateKey_file": "/etc/custom/sslConf/pupu_core_3501000001.prv"
|
privateKey_file: '/etc/custom/sslConf/pupu_core_3501000001.prv',
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"pushConf": {
|
|
||||||
"isRun": true,
|
|
||||||
"isUseResumeBrokenTransfer": false,
|
|
||||||
"broken": {
|
|
||||||
"resume": { "intervalTime_ms": 1000 },
|
|
||||||
"filter": {
|
|
||||||
"filter_s": 600,
|
|
||||||
"relevanceTaskId": ["T1", "T2", "T3", "T4", "T5"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"encrypt_decrypt": {
|
pushConf: {
|
||||||
"encrypt_1": {
|
isRun: true,
|
||||||
"algorithm": "AES",
|
isUseResumeBrokenTransfer: false,
|
||||||
"param": {
|
broken: {
|
||||||
"mode": "CBC",
|
resume: { intervalTime_ms: 1000 },
|
||||||
"key": "0123456789abcdef",
|
filter: {
|
||||||
"ivec": "0123456789abcdef",
|
filter_s: 600,
|
||||||
"bits": 128
|
relevanceTaskId: ['T1', 'T2', 'T3', 'T4', 'T5'],
|
||||||
},
|
},
|
||||||
"enable": false
|
|
||||||
},
|
},
|
||||||
"decrypt_1": {
|
|
||||||
"algorithm": "AES",
|
|
||||||
"param": {
|
|
||||||
"mode": "CBC",
|
|
||||||
"key": "0123456789abcdef",
|
|
||||||
"ivec": "0123456789abcdef",
|
|
||||||
"bits": 128
|
|
||||||
},
|
},
|
||||||
"enable": false
|
encrypt_decrypt: {
|
||||||
}
|
encrypt_1: {
|
||||||
}
|
algorithm: 'AES',
|
||||||
})
|
param: {
|
||||||
|
mode: 'CBC',
|
||||||
|
key: '0123456789abcdef',
|
||||||
|
ivec: '0123456789abcdef',
|
||||||
|
bits: 128,
|
||||||
|
},
|
||||||
|
enable: false,
|
||||||
|
},
|
||||||
|
decrypt_1: {
|
||||||
|
algorithm: 'AES',
|
||||||
|
param: {
|
||||||
|
mode: 'CBC',
|
||||||
|
key: '0123456789abcdef',
|
||||||
|
ivec: '0123456789abcdef',
|
||||||
|
bits: 128,
|
||||||
|
},
|
||||||
|
enable: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => ({ ...activeDeviceConfig.value }),
|
() => ({ ...activeDeviceConfig.value }),
|
||||||
(newVal) => {
|
(newVal) => {
|
||||||
console.log("数据变化",newVal)
|
console.log('数据变化', newVal);
|
||||||
platConfigList.value[ActiveRowIndex.value] = newVal;
|
platConfigList.value[ActiveRowIndex.value] = newVal;
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// const saveDeviceDataConfig = () => {
|
// const saveDeviceDataConfig = () => {
|
||||||
// platConfigList.value[ActiveRowIndex.value] = activeDeviceConfig.value;
|
// platConfigList.value[ActiveRowIndex.value] = activeDeviceConfig.value;
|
||||||
// }
|
// }
|
||||||
|
@ -579,32 +548,29 @@ const tableRowClassName = ({ row, rowIndex }) => {
|
||||||
|
|
||||||
//选择设备配置
|
//选择设备配置
|
||||||
const taskConfigClick = (e) => {
|
const taskConfigClick = (e) => {
|
||||||
console.log(`current page:`,e)
|
console.log(`current page:`, e);
|
||||||
activeDeviceConfig.value = e;
|
activeDeviceConfig.value = e;
|
||||||
platConfigTableRef.value.toggleRowSelection(e);
|
platConfigTableRef.value.toggleRowSelection(e);
|
||||||
|
|
||||||
ActiveRowIndex.value = platConfigList.value.indexOf(e);
|
ActiveRowIndex.value = platConfigList.value.indexOf(e);
|
||||||
// e.isDoubleClicked = !e.isDoubleClicked;
|
// e.isDoubleClicked = !e.isDoubleClicked;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
//更新表格宽度
|
//更新表格宽度
|
||||||
const handleResize = () => {
|
const handleResize = () => {
|
||||||
deviceDataTableRef.value.doLayout();
|
deviceDataTableRef.value.doLayout();
|
||||||
tabelBox.value = window.innerWidth - 180 - 10 ;
|
tabelBox.value = window.innerWidth - 180 - 10;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
window.addEventListener('resize', handleResize);
|
window.addEventListener('resize', handleResize);
|
||||||
getDeviceConfig()
|
getDeviceConfig();
|
||||||
handleResize()
|
handleResize();
|
||||||
// if(platConfigList.value[0]){
|
// if(platConfigList.value[0]){
|
||||||
// activeDeviceConfig.value = platConfigList.value[0];
|
// activeDeviceConfig.value = platConfigList.value[0];
|
||||||
// platConfigTableRef.value.toggleRowSelection(platConfigList.value[0]);
|
// platConfigTableRef.value.toggleRowSelection(platConfigList.value[0]);
|
||||||
// ActiveRowIndex.value = 0;
|
// ActiveRowIndex.value = 0;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
});
|
});
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
window.removeEventListener('resize', handleResize);
|
window.removeEventListener('resize', handleResize);
|
||||||
|
@ -618,35 +584,34 @@ onUnmounted(() => {
|
||||||
:deep(.el-table .el-scrollbar) {
|
:deep(.el-table .el-scrollbar) {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
#southdirection-box{
|
#southdirection-box {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
.btn-list{
|
.btn-list {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
.plat-config{
|
.plat-config {
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
.data-config{
|
.data-config {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: calc(100% - 278px - 226px);
|
height: calc(100% - 278px - 226px);
|
||||||
.table-box{
|
.table-box {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: calc(100% - 120px);
|
height: calc(100% - 120px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.table-box{
|
.table-box {
|
||||||
//position: absolute;
|
//position: absolute;
|
||||||
//width: 100%;
|
//width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
<style>
|
<style>
|
||||||
.selected-row {
|
.selected-row {
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="data-config">
|
<div class="data-config">
|
||||||
<h2>数据源配置 {{activeDeviceConfig.equipId}}</h2>
|
<h2>数据源配置 {{ activeDeviceConfig.equipId }}</h2>
|
||||||
<div class="btn-list">
|
<div class="btn-list">
|
||||||
<div class="btn-list-left">
|
<div class="btn-list-left">
|
||||||
<el-button type="primary" @click="addDeviceDataConfig">新增配置</el-button>
|
<el-button type="primary" @click="addDeviceDataConfig">新增配置</el-button>
|
||||||
|
@ -78,7 +78,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table-box">
|
<div class="table-box">
|
||||||
<el-table ref="deviceDataTableRef" :data="activeDeviceConfig.properties" border size="small" height="100%" :style="{ width: tabelBox + 'px' }" empty-text="配置为空">
|
<el-table
|
||||||
|
ref="deviceDataTableRef"
|
||||||
|
:data="activeDeviceConfig.properties"
|
||||||
|
border
|
||||||
|
size="small"
|
||||||
|
height="100%"
|
||||||
|
:style="{ width: tabelBox + 'px' }"
|
||||||
|
empty-text="配置为空"
|
||||||
|
>
|
||||||
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
<el-table-column type="index" label="序号" align="center" width="60" fixed />
|
||||||
<el-table-column prop="id" label="数据ID" fixed align="center">
|
<el-table-column prop="id" label="数据ID" fixed align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
@ -209,7 +217,13 @@
|
||||||
<!-- <el-select v-model="scope.row.uploadMode" placeholder="请选择上报策略">-->
|
<!-- <el-select v-model="scope.row.uploadMode" placeholder="请选择上报策略">-->
|
||||||
<!-- <el-option :value="item.uploadMode" v-for="(item,index) in taskList" :key="index" :label="item.uploadMode"></el-option>-->
|
<!-- <el-option :value="item.uploadMode" v-for="(item,index) in taskList" :key="index" :label="item.uploadMode"></el-option>-->
|
||||||
<!-- </el-select>-->
|
<!-- </el-select>-->
|
||||||
<el-autocomplete v-model="scope.row.uploadMode" :fetch-suggestions="querySearch" clearable class="inline-input w-50" placeholder="请选择上报策略" />
|
<el-autocomplete
|
||||||
|
v-model="scope.row.uploadMode"
|
||||||
|
:fetch-suggestions="querySearch"
|
||||||
|
clearable
|
||||||
|
class="inline-input w-50"
|
||||||
|
placeholder="请选择上报策略"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="55" fixed="right" align="center">
|
<el-table-column label="操作" width="55" fixed="right" align="center">
|
||||||
|
@ -349,7 +363,7 @@ import { guidGenerator } from '/@/utils/function.js';
|
||||||
import FileSaver from 'file-saver';
|
import FileSaver from 'file-saver';
|
||||||
import * as XLSX from 'xlsx';
|
import * as XLSX from 'xlsx';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import {getDeviceConf, getSerialPortDataList, setDeviceConf} from "/@/api/gateway/southdirection";
|
import { getDeviceConf, getSerialPortDataList, setDeviceConf } from '/@/api/gateway/southdirection';
|
||||||
|
|
||||||
const dataTypeArray = ref([
|
const dataTypeArray = ref([
|
||||||
{ type: 'bool', datalen: 1, show: false },
|
{ type: 'bool', datalen: 1, show: false },
|
||||||
|
@ -380,7 +394,7 @@ const dataTypeArray = ref([
|
||||||
{ type: 'uint32_ABCD', datalen: 4, show: false },
|
{ type: 'uint32_ABCD', datalen: 4, show: false },
|
||||||
{ type: 'uint32_BADC', datalen: 4, show: false },
|
{ type: 'uint32_BADC', datalen: 4, show: false },
|
||||||
{ type: 'uint32_CDAB', datalen: 4, show: false },
|
{ type: 'uint32_CDAB', datalen: 4, show: false },
|
||||||
{ type: 'uint32_DCBA', datalen: 4, show: false }
|
{ type: 'uint32_DCBA', datalen: 4, show: false },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//上报策略
|
//上报策略
|
||||||
|
@ -388,15 +402,15 @@ const uploadModeList = ref([
|
||||||
{ value: 'timer 10', link: 'timer 10' },
|
{ value: 'timer 10', link: 'timer 10' },
|
||||||
{ value: 'change 10', link: 'change 10' },
|
{ value: 'change 10', link: 'change 10' },
|
||||||
{ value: 'timer 10 || change 10', link: 'timer 10 || change 10' },
|
{ value: 'timer 10 || change 10', link: 'timer 10 || change 10' },
|
||||||
{ value: 'label LD200 up', link: 'label LD200 up' }
|
{ value: 'label LD200 up', link: 'label LD200 up' },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const querySearch = (queryString, cb) => {
|
const querySearch = (queryString, cb) => {
|
||||||
const results = queryString ? uploadModeList.value.filter(createFilter(queryString)) : uploadModeList.value;
|
const results = queryString ? uploadModeList.value.filter(createFilter(queryString)) : uploadModeList.value;
|
||||||
cb(results);
|
cb(results);
|
||||||
};
|
};
|
||||||
const createFilter = queryString => {
|
const createFilter = (queryString) => {
|
||||||
return restaurant => {
|
return (restaurant) => {
|
||||||
return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
|
return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -424,7 +438,7 @@ const addDeviceConfig = () => {
|
||||||
isBlockRead: true, // 是否块读取
|
isBlockRead: true, // 是否块读取
|
||||||
isBlockWrite: true, // 是否块写入
|
isBlockWrite: true, // 是否块写入
|
||||||
isRunCmd: true, // 是否运行命令
|
isRunCmd: true, // 是否运行命令
|
||||||
pollingCycleTime_ms: 1000 // 轮询周期时间
|
pollingCycleTime_ms: 1000, // 轮询周期时间
|
||||||
},
|
},
|
||||||
conclude: { isUse: false, libName: '' }, // 结论库设置
|
conclude: { isUse: false, libName: '' }, // 结论库设置
|
||||||
equipId: '', // 设备ID
|
equipId: '', // 设备ID
|
||||||
|
@ -432,12 +446,11 @@ const addDeviceConfig = () => {
|
||||||
inductionParam: {
|
inductionParam: {
|
||||||
// 感应参数设置
|
// 感应参数设置
|
||||||
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
||||||
maxLenBlock_write: { boolArea: -1, charArea: -1 } // 写入最大长度
|
maxLenBlock_write: { boolArea: -1, charArea: -1 }, // 写入最大长度
|
||||||
},
|
},
|
||||||
interfaceParams: { link: '', physicalInterface: '' }, // 接口参数
|
interfaceParams: { link: '', physicalInterface: '' }, // 接口参数
|
||||||
properties: [
|
properties: [],
|
||||||
],
|
protocol: { libName: '', params: { linkPar: '' } }, // 通信协议设置
|
||||||
protocol: { libName: '', params: { linkPar: '' } } // 通信协议设置
|
|
||||||
};
|
};
|
||||||
console.log('deviceConfigList.value', deviceConfigTableRef.value);
|
console.log('deviceConfigList.value', deviceConfigTableRef.value);
|
||||||
deviceConfigList.value.push(newDeviceConfig);
|
deviceConfigList.value.push(newDeviceConfig);
|
||||||
|
@ -445,32 +458,32 @@ const addDeviceConfig = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
//删除配置
|
//删除配置
|
||||||
const delDeviceConfig = index => {
|
const delDeviceConfig = (index) => {
|
||||||
console.log('当前点击的行号', index);
|
console.log('当前点击的行号', index);
|
||||||
ElMessageBox.confirm('确认要删除该设备配置吗?', '告警', {
|
ElMessageBox.confirm('确认要删除该设备配置吗?', '告警', {
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning',
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
deviceConfigList.value.splice(index, 1);
|
deviceConfigList.value.splice(index, 1);
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '删除成功'
|
message: '删除成功',
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
message: '取消删除'
|
message: '取消删除',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const getDeviceConfig = () => {
|
const getDeviceConfig = () => {
|
||||||
console.log('获取配置');
|
console.log('获取配置');
|
||||||
getDeviceConf( {})
|
getDeviceConf({})
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
console.log(response); // 打印响应数据
|
console.log(response); // 打印响应数据
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
|
@ -490,29 +503,29 @@ const getDeviceConfig = () => {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const dataFormat = data => {
|
const dataFormat = (data) => {
|
||||||
console.log('数据格式化', deviceConfigList.value);
|
console.log('数据格式化', deviceConfigList.value);
|
||||||
let nowtaskList =
|
let nowtaskList =
|
||||||
taskList.value.map(item => {
|
taskList.value.map((item) => {
|
||||||
item.dataIdEntire = [];
|
item.dataIdEntire = [];
|
||||||
return item;
|
return item;
|
||||||
}) || [];
|
}) || [];
|
||||||
if (nowtaskList.length > 0) {
|
if (nowtaskList.length > 0) {
|
||||||
deviceConfigList.value.forEach(item => {
|
deviceConfigList.value.forEach((item) => {
|
||||||
item.properties.forEach(property => {
|
item.properties.forEach((property) => {
|
||||||
let taskId = property.taskId;
|
let taskId = property.taskId;
|
||||||
nowtaskList.forEach(task => {
|
nowtaskList.forEach((task) => {
|
||||||
if (task.taskId === taskId) {
|
if (task.taskId === taskId) {
|
||||||
task.dataIdEntire.push({
|
task.dataIdEntire.push({
|
||||||
equipId: item.equipId,
|
equipId: item.equipId,
|
||||||
idInfo: [{ id: property.id, uploadMode: property.uploadMode }]
|
idInfo: [{ id: property.id, uploadMode: property.uploadMode }],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -522,7 +535,7 @@ const dataFormat = data => {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
equips: data,
|
equips: data,
|
||||||
tasks: nowtaskList
|
tasks: nowtaskList,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -531,7 +544,7 @@ const setDeviceConfig = () => {
|
||||||
let obj = dataFormat(deviceConfigList.value);
|
let obj = dataFormat(deviceConfigList.value);
|
||||||
console.log('数据格式化后', obj);
|
console.log('数据格式化后', obj);
|
||||||
setDeviceConf(obj)
|
setDeviceConf(obj)
|
||||||
.then(response => {
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
console.log(response); // 打印响应数据
|
console.log(response); // 打印响应数据
|
||||||
if (response.code == 0) {
|
if (response.code == 0) {
|
||||||
|
@ -540,7 +553,7 @@ const setDeviceConfig = () => {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
console.error(error); // 打印错误信息
|
console.error(error); // 打印错误信息
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
|
@ -561,20 +574,20 @@ const collectionForm = ref({
|
||||||
isBlockRead: true, // 是否块读取
|
isBlockRead: true, // 是否块读取
|
||||||
isBlockWrite: true, // 是否块写入
|
isBlockWrite: true, // 是否块写入
|
||||||
isRunCmd: true, // 是否运行命令
|
isRunCmd: true, // 是否运行命令
|
||||||
pollingCycleTime_ms: 1000 // 轮询周期时间
|
pollingCycleTime_ms: 1000, // 轮询周期时间
|
||||||
},
|
},
|
||||||
inductionParam: {
|
inductionParam: {
|
||||||
// 感应参数设置
|
// 感应参数设置
|
||||||
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
||||||
maxLenBlock_write: { boolArea: -1, charArea: -1 } // 写入最大长度
|
maxLenBlock_write: { boolArea: -1, charArea: -1 }, // 写入最大长度
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
//打开采集配置弹窗
|
//打开采集配置弹窗
|
||||||
const openCollectionModel = row => {
|
const openCollectionModel = (row) => {
|
||||||
console.log('当前采集', row);
|
console.log('当前采集', row);
|
||||||
collectionForm.value = {
|
collectionForm.value = {
|
||||||
collectConf: row.collectConf,
|
collectConf: row.collectConf,
|
||||||
inductionParam: row.inductionParam
|
inductionParam: row.inductionParam,
|
||||||
};
|
};
|
||||||
collectionModelShow.value = true;
|
collectionModelShow.value = true;
|
||||||
};
|
};
|
||||||
|
@ -596,11 +609,12 @@ const dlt645Form = ref({
|
||||||
baudrate: 115200,
|
baudrate: 115200,
|
||||||
databits: 8,
|
databits: 8,
|
||||||
stopbits: 1,
|
stopbits: 1,
|
||||||
parity: 'N'
|
parity: 'N',
|
||||||
});
|
});
|
||||||
//获取端口列表
|
//获取端口列表
|
||||||
const getSerialPortList = (msgShow = true) => {
|
const getSerialPortList = (msgShow = true) => {
|
||||||
getSerialPortDataList({}).then(response => {
|
getSerialPortDataList({})
|
||||||
|
.then((response) => {
|
||||||
// 成功响应后的处理
|
// 成功响应后的处理
|
||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
serialportList.value = response.data.list || [];
|
serialportList.value = response.data.list || [];
|
||||||
|
@ -611,18 +625,26 @@ const getSerialPortList = (msgShow = true) => {
|
||||||
ElMessage.error(response.message);
|
ElMessage.error(response.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch((error) => {
|
||||||
// 错误处理
|
// 错误处理
|
||||||
ElMessage.error(error);
|
ElMessage.error(error);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const editDlt645 = formEl => {
|
const editDlt645 = (formEl) => {
|
||||||
if (!formEl) return;
|
if (!formEl) return;
|
||||||
formEl.validate(valid => {
|
formEl.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.link =
|
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.link =
|
||||||
dlt645Form.value.port + ',' + dlt645Form.value.baudrate + ',' + dlt645Form.value.databits + ',' + dlt645Form.value.stopbits + ',' + dlt645Form.value.parity;
|
dlt645Form.value.port +
|
||||||
|
',' +
|
||||||
|
dlt645Form.value.baudrate +
|
||||||
|
',' +
|
||||||
|
dlt645Form.value.databits +
|
||||||
|
',' +
|
||||||
|
dlt645Form.value.stopbits +
|
||||||
|
',' +
|
||||||
|
dlt645Form.value.parity;
|
||||||
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.physicalInterface = dlt645Form.value.port;
|
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.physicalInterface = dlt645Form.value.port;
|
||||||
dlt645ModelShow.value = false;
|
dlt645ModelShow.value = false;
|
||||||
}
|
}
|
||||||
|
@ -633,18 +655,18 @@ const editDlt645 = formEl => {
|
||||||
const tcpModelShow = ref(false);
|
const tcpModelShow = ref(false);
|
||||||
const tcpRef = ref();
|
const tcpRef = ref();
|
||||||
const tcpForm = ref({
|
const tcpForm = ref({
|
||||||
link: '192.168.0.1:80'
|
link: '192.168.0.1:80',
|
||||||
});
|
});
|
||||||
|
|
||||||
const tcpFormRules = reactive({
|
const tcpFormRules = reactive({
|
||||||
link: [
|
link: [
|
||||||
{ required: true, message: 'ip地址+端口', trigger: 'blur' },
|
{ required: true, message: 'ip地址+端口', trigger: 'blur' },
|
||||||
{ pattern: /^([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]{1,5}$/, message: '格式错误格式应该是ip地址+端口如:192.168.0.1:80', trigger: 'blur' }
|
{ pattern: /^([0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]{1,5}$/, message: '格式错误格式应该是ip地址+端口如:192.168.0.1:80', trigger: 'blur' },
|
||||||
]
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
//打开采集配置弹窗
|
//打开采集配置弹窗
|
||||||
const openConnectModel = row => {
|
const openConnectModel = (row) => {
|
||||||
console.log('当前采集', row.protocol.libName);
|
console.log('当前采集', row.protocol.libName);
|
||||||
if (!row.protocol.libName) {
|
if (!row.protocol.libName) {
|
||||||
ElMessage.error('请先选择通信类型');
|
ElMessage.error('请先选择通信类型');
|
||||||
|
@ -661,7 +683,7 @@ const openConnectModel = row => {
|
||||||
baudrate: 115200,
|
baudrate: 115200,
|
||||||
databits: 8,
|
databits: 8,
|
||||||
stopbits: 1,
|
stopbits: 1,
|
||||||
parity: 'N'
|
parity: 'N',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
// getSerialPortList()
|
// getSerialPortList()
|
||||||
|
@ -674,9 +696,9 @@ const openConnectModel = row => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const editTcp = formEl => {
|
const editTcp = (formEl) => {
|
||||||
if (!formEl) return;
|
if (!formEl) return;
|
||||||
formEl.validate(valid => {
|
formEl.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.link = tcpForm.value.link;
|
deviceConfigList.value[ActiveRowIndex.value].interfaceParams.link = tcpForm.value.link;
|
||||||
tcpModelShow.value = false;
|
tcpModelShow.value = false;
|
||||||
|
@ -693,7 +715,7 @@ const activeDeviceConfig = ref({
|
||||||
isBlockRead: true, // 是否块读取
|
isBlockRead: true, // 是否块读取
|
||||||
isBlockWrite: true, // 是否块写入
|
isBlockWrite: true, // 是否块写入
|
||||||
isRunCmd: true, // 是否运行命令
|
isRunCmd: true, // 是否运行命令
|
||||||
pollingCycleTime_ms: 1000 // 轮询周期时间
|
pollingCycleTime_ms: 1000, // 轮询周期时间
|
||||||
},
|
},
|
||||||
conclude: { isUse: false, libName: '' }, // 结论库设置
|
conclude: { isUse: false, libName: '' }, // 结论库设置
|
||||||
equipId: 'dev102', // 设备ID
|
equipId: 'dev102', // 设备ID
|
||||||
|
@ -701,7 +723,7 @@ const activeDeviceConfig = ref({
|
||||||
inductionParam: {
|
inductionParam: {
|
||||||
// 感应参数设置
|
// 感应参数设置
|
||||||
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
||||||
maxLenBlock_write: { boolArea: -1, charArea: -1 } // 写入最大长度
|
maxLenBlock_write: { boolArea: -1, charArea: -1 }, // 写入最大长度
|
||||||
},
|
},
|
||||||
interfaceParams: { link: '', physicalInterface: '' }, // 接口参数
|
interfaceParams: { link: '', physicalInterface: '' }, // 接口参数
|
||||||
properties: [
|
properties: [
|
||||||
|
@ -719,15 +741,15 @@ const activeDeviceConfig = ref({
|
||||||
// 北向计算参数
|
// 北向计算参数
|
||||||
decimal: { numBits: 1, way: 'rounding' }, // 小数处理方式
|
decimal: { numBits: 1, way: 'rounding' }, // 小数处理方式
|
||||||
offset: '0', // 偏移量
|
offset: '0', // 偏移量
|
||||||
proportion: '1' // 比例
|
proportion: '1', // 比例
|
||||||
},
|
},
|
||||||
offset: '0', // 偏移量
|
offset: '0', // 偏移量
|
||||||
proportion: '1', // 比例
|
proportion: '1', // 比例
|
||||||
taskId: '', // 任务ID
|
taskId: '', // 任务ID
|
||||||
uploadMode: '' // 上报策略
|
uploadMode: '', // 上报策略
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
protocol: { libName: 'ModbusTCP', params: { linkPar: '' } } // 通信协议设置
|
protocol: { libName: 'ModbusTCP', params: { linkPar: '' } }, // 通信协议设置
|
||||||
});
|
});
|
||||||
|
|
||||||
//添加数据源配置
|
//添加数据源配置
|
||||||
|
@ -747,45 +769,45 @@ const addDeviceDataConfig = () => {
|
||||||
// 北向计算参数
|
// 北向计算参数
|
||||||
decimal: { numBits: 1, way: 'rounding' }, // 小数处理方式
|
decimal: { numBits: 1, way: 'rounding' }, // 小数处理方式
|
||||||
offset: '0', // 偏移量
|
offset: '0', // 偏移量
|
||||||
proportion: '1' // 比例
|
proportion: '1', // 比例
|
||||||
},
|
},
|
||||||
offset: '0', // 偏移量
|
offset: '0', // 偏移量
|
||||||
proportion: '1', // 比例
|
proportion: '1', // 比例
|
||||||
taskId: '', // 任务ID
|
taskId: '', // 任务ID
|
||||||
uploadMode: '' // 上报策略
|
uploadMode: '', // 上报策略
|
||||||
};
|
};
|
||||||
activeDeviceConfig.value.properties.push(newDeviceDataConfig);
|
activeDeviceConfig.value.properties.push(newDeviceDataConfig);
|
||||||
};
|
};
|
||||||
|
|
||||||
const changedataDisplay = (e, index) => {
|
const changedataDisplay = (e, index) => {
|
||||||
let dataTypeObj = dataTypeArray.value.filter(item => item.type === e);
|
let dataTypeObj = dataTypeArray.value.filter((item) => item.type === e);
|
||||||
activeDeviceConfig.value.properties[index].datalen = dataTypeObj[0].datalen;
|
activeDeviceConfig.value.properties[index].datalen = dataTypeObj[0].datalen;
|
||||||
activeDeviceConfig.value.properties[index].datalenShow = dataTypeObj[0].show;
|
activeDeviceConfig.value.properties[index].datalenShow = dataTypeObj[0].show;
|
||||||
};
|
};
|
||||||
|
|
||||||
const changeTaskId = (e, index) => {
|
const changeTaskId = (e, index) => {
|
||||||
let taskObj = taskList.value.filter(item => item.taskId === e);
|
let taskObj = taskList.value.filter((item) => item.taskId === e);
|
||||||
activeDeviceConfig.value.properties[index].uploadMode = taskObj[0].uploadMode;
|
activeDeviceConfig.value.properties[index].uploadMode = taskObj[0].uploadMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
//删除数据源配置
|
//删除数据源配置
|
||||||
const delDeviceDataConfig = index => {
|
const delDeviceDataConfig = (index) => {
|
||||||
ElMessageBox.confirm('确认要删除该数据源配置吗?', '告警', {
|
ElMessageBox.confirm('确认要删除该数据源配置吗?', '告警', {
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning',
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
activeDeviceConfig.value.properties.splice(index, 1);
|
activeDeviceConfig.value.properties.splice(index, 1);
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '删除成功'
|
message: '删除成功',
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
message: '取消删除'
|
message: '取消删除',
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -804,9 +826,9 @@ const handleResize = () => {
|
||||||
|
|
||||||
const exportDeviceConfigXlsx = () => {
|
const exportDeviceConfigXlsx = () => {
|
||||||
const workbook = XLSX.utils.book_new();
|
const workbook = XLSX.utils.book_new();
|
||||||
deviceConfigList.value.map(item => {
|
deviceConfigList.value.map((item) => {
|
||||||
let dataArr = [];
|
let dataArr = [];
|
||||||
dataArr = item.properties.map(val => {
|
dataArr = item.properties.map((val) => {
|
||||||
return {
|
return {
|
||||||
equipId: item.equipId,
|
equipId: item.equipId,
|
||||||
...val,
|
...val,
|
||||||
|
@ -819,7 +841,7 @@ const exportDeviceConfigXlsx = () => {
|
||||||
equipName: item.equipName,
|
equipName: item.equipName,
|
||||||
protocol: item.protocol.libName,
|
protocol: item.protocol.libName,
|
||||||
link: item.interfaceParams.link,
|
link: item.interfaceParams.link,
|
||||||
linkPar: item.protocol.params.linkPar
|
linkPar: item.protocol.params.linkPar,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
// 将 JSON 数据转换为工作表
|
// 将 JSON 数据转换为工作表
|
||||||
|
@ -840,7 +862,7 @@ const exportDeviceConfigXlsx = () => {
|
||||||
const exportDeviceDataConfigXlsx = () => {
|
const exportDeviceDataConfigXlsx = () => {
|
||||||
const workbook = XLSX.utils.book_new();
|
const workbook = XLSX.utils.book_new();
|
||||||
let dataArr = [];
|
let dataArr = [];
|
||||||
dataArr = activeDeviceConfig.value.properties.map(val => {
|
dataArr = activeDeviceConfig.value.properties.map((val) => {
|
||||||
return {
|
return {
|
||||||
equipId: activeDeviceConfig.value.equipId,
|
equipId: activeDeviceConfig.value.equipId,
|
||||||
...val,
|
...val,
|
||||||
|
@ -853,7 +875,7 @@ const exportDeviceDataConfigXlsx = () => {
|
||||||
equipName: activeDeviceConfig.value.equipName,
|
equipName: activeDeviceConfig.value.equipName,
|
||||||
libName: activeDeviceConfig.value.protocol.libName,
|
libName: activeDeviceConfig.value.protocol.libName,
|
||||||
link: activeDeviceConfig.value.interfaceParams.link,
|
link: activeDeviceConfig.value.interfaceParams.link,
|
||||||
linkPar: activeDeviceConfig.value.protocol.params.linkPar
|
linkPar: activeDeviceConfig.value.protocol.params.linkPar,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
// 将 JSON 数据转换为工作表
|
// 将 JSON 数据转换为工作表
|
||||||
|
@ -863,7 +885,10 @@ const exportDeviceDataConfigXlsx = () => {
|
||||||
// 将工作簿写入二进制数组
|
// 将工作簿写入二进制数组
|
||||||
const selIn = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'array' });
|
const selIn = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'array' });
|
||||||
try {
|
try {
|
||||||
FileSaver.saveAs(new Blob([selIn], { type: 'application/octet-stream' }), '网关南向采集数据源配置' + dayjs().format('YYYY-MM-DD HH-mm-ss') + '.xlsx');
|
FileSaver.saveAs(
|
||||||
|
new Blob([selIn], { type: 'application/octet-stream' }),
|
||||||
|
'网关南向采集数据源配置' + dayjs().format('YYYY-MM-DD HH-mm-ss') + '.xlsx'
|
||||||
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (typeof console !== 'undefined') console.log(e, selIn);
|
if (typeof console !== 'undefined') console.log(e, selIn);
|
||||||
}
|
}
|
||||||
|
@ -878,13 +903,13 @@ const handleFileChange = (file, fileList) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
reader.onload = e => {
|
reader.onload = (e) => {
|
||||||
const data = new Uint8Array(e.target.result);
|
const data = new Uint8Array(e.target.result);
|
||||||
const workbook = XLSX.read(data, { type: 'array' });
|
const workbook = XLSX.read(data, { type: 'array' });
|
||||||
|
|
||||||
// 解析所有工作表
|
// 解析所有工作表
|
||||||
const sheets = {};
|
const sheets = {};
|
||||||
workbook.SheetNames.forEach(sheetName => {
|
workbook.SheetNames.forEach((sheetName) => {
|
||||||
const sheet = workbook.Sheets[sheetName];
|
const sheet = workbook.Sheets[sheetName];
|
||||||
const json = XLSX.utils.sheet_to_json(sheet);
|
const json = XLSX.utils.sheet_to_json(sheet);
|
||||||
sheets[sheetName] = json;
|
sheets[sheetName] = json;
|
||||||
|
@ -895,10 +920,10 @@ const handleFileChange = (file, fileList) => {
|
||||||
let dataArr = sheets[prop];
|
let dataArr = sheets[prop];
|
||||||
if (dataArr.length > 0) {
|
if (dataArr.length > 0) {
|
||||||
let flag = true;
|
let flag = true;
|
||||||
deviceConfigList.value.forEach(item => {
|
deviceConfigList.value.forEach((item) => {
|
||||||
if (item.equipId === dataArr[0].equipId) {
|
if (item.equipId === dataArr[0].equipId) {
|
||||||
flag = false;
|
flag = false;
|
||||||
item.properties = dataArr.map(val => {
|
item.properties = dataArr.map((val) => {
|
||||||
return {
|
return {
|
||||||
authority: val.authority, // 读写权限
|
authority: val.authority, // 读写权限
|
||||||
dataAddress: val.dataAddress, // 数据地址
|
dataAddress: val.dataAddress, // 数据地址
|
||||||
|
@ -914,12 +939,12 @@ const handleFileChange = (file, fileList) => {
|
||||||
// 北向计算参数
|
// 北向计算参数
|
||||||
decimal: { numBits: val.numBits, way: val.way }, // 小数处理方式
|
decimal: { numBits: val.numBits, way: val.way }, // 小数处理方式
|
||||||
offset: val.offset, // 偏移量
|
offset: val.offset, // 偏移量
|
||||||
proportion: val.proportion // 比例
|
proportion: val.proportion, // 比例
|
||||||
},
|
},
|
||||||
offset: val.offset, // 偏移量
|
offset: val.offset, // 偏移量
|
||||||
proportion: val.proportion, // 比例
|
proportion: val.proportion, // 比例
|
||||||
taskId: val.taskId, // 任务ID
|
taskId: val.taskId, // 任务ID
|
||||||
uploadMode: val.uploadMode // 上报策略
|
uploadMode: val.uploadMode, // 上报策略
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
item.equipName = dataArr[0].equipName;
|
item.equipName = dataArr[0].equipName;
|
||||||
|
@ -940,7 +965,7 @@ const handleFileChange = (file, fileList) => {
|
||||||
isBlockRead: true, // 是否块读取
|
isBlockRead: true, // 是否块读取
|
||||||
isBlockWrite: true, // 是否块写入
|
isBlockWrite: true, // 是否块写入
|
||||||
isRunCmd: true, // 是否运行命令
|
isRunCmd: true, // 是否运行命令
|
||||||
pollingCycleTime_ms: 1000 // 轮询周期时间
|
pollingCycleTime_ms: 1000, // 轮询周期时间
|
||||||
},
|
},
|
||||||
conclude: { isUse: false, libName: '' }, // 结论库设置
|
conclude: { isUse: false, libName: '' }, // 结论库设置
|
||||||
equipId: dataArr[0].equipId, // 设备ID
|
equipId: dataArr[0].equipId, // 设备ID
|
||||||
|
@ -948,13 +973,13 @@ const handleFileChange = (file, fileList) => {
|
||||||
inductionParam: {
|
inductionParam: {
|
||||||
// 感应参数设置
|
// 感应参数设置
|
||||||
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
maxLenBlock_read: { boolArea: -1, charArea: -1 }, // 读取最大长度
|
||||||
maxLenBlock_write: { boolArea: -1, charArea: -1 } // 写入最大长度
|
maxLenBlock_write: { boolArea: -1, charArea: -1 }, // 写入最大长度
|
||||||
},
|
},
|
||||||
interfaceParams: { link: dataArr[0].link, physicalInterface: '' }, // 接口参数
|
interfaceParams: { link: dataArr[0].link, physicalInterface: '' }, // 接口参数
|
||||||
properties: [],
|
properties: [],
|
||||||
protocol: { libName: dataArr[0].protocol, params: { linkPar: dataArr[0].linkPar } } // 通信协议设置
|
protocol: { libName: dataArr[0].protocol, params: { linkPar: dataArr[0].linkPar } }, // 通信协议设置
|
||||||
};
|
};
|
||||||
obj.properties = dataArr.map(val => {
|
obj.properties = dataArr.map((val) => {
|
||||||
return {
|
return {
|
||||||
authority: val.authority, // 读写权限
|
authority: val.authority, // 读写权限
|
||||||
dataAddress: val.dataAddress, // 数据地址
|
dataAddress: val.dataAddress, // 数据地址
|
||||||
|
@ -970,12 +995,12 @@ const handleFileChange = (file, fileList) => {
|
||||||
// 北向计算参数
|
// 北向计算参数
|
||||||
decimal: { numBits: val.numBits, way: val.way }, // 小数处理方式
|
decimal: { numBits: val.numBits, way: val.way }, // 小数处理方式
|
||||||
offset: val.offset, // 偏移量
|
offset: val.offset, // 偏移量
|
||||||
proportion: val.proportion // 比例
|
proportion: val.proportion, // 比例
|
||||||
},
|
},
|
||||||
offset: val.offset, // 偏移量
|
offset: val.offset, // 偏移量
|
||||||
proportion: val.proportion, // 比例
|
proportion: val.proportion, // 比例
|
||||||
taskId: val.taskId, // 任务ID
|
taskId: val.taskId, // 任务ID
|
||||||
uploadMode: val.uploadMode // 上报策略
|
uploadMode: val.uploadMode, // 上报策略
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
deviceConfigList.value.push(obj);
|
deviceConfigList.value.push(obj);
|
||||||
|
|
190
yarn.lock
190
yarn.lock
|
@ -139,6 +139,18 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint-visitor-keys "^3.3.0"
|
eslint-visitor-keys "^3.3.0"
|
||||||
|
|
||||||
|
"@eslint-community/eslint-utils@^4.4.0":
|
||||||
|
version "4.4.1"
|
||||||
|
resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
|
||||||
|
integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
|
||||||
|
dependencies:
|
||||||
|
eslint-visitor-keys "^3.4.3"
|
||||||
|
|
||||||
|
"@eslint-community/regexpp@^4.10.0":
|
||||||
|
version "4.12.1"
|
||||||
|
resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
|
||||||
|
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
|
||||||
|
|
||||||
"@eslint-community/regexpp@^4.4.0":
|
"@eslint-community/regexpp@^4.4.0":
|
||||||
version "4.5.0"
|
version "4.5.0"
|
||||||
resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz"
|
resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz"
|
||||||
|
@ -203,12 +215,12 @@
|
||||||
"@nodelib/fs.stat" "2.0.5"
|
"@nodelib/fs.stat" "2.0.5"
|
||||||
run-parallel "^1.1.9"
|
run-parallel "^1.1.9"
|
||||||
|
|
||||||
"@nodelib/fs.stat@2.0.5":
|
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||||
|
|
||||||
"@nodelib/fs.walk@^1.2.8":
|
"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
|
resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
|
||||||
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
|
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
|
||||||
|
@ -251,6 +263,76 @@
|
||||||
resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
|
resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
|
||||||
integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
|
integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
|
||||||
|
|
||||||
|
"@typescript-eslint/eslint-plugin@^8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz#0901933326aea4443b81df3f740ca7dfc45c7bea"
|
||||||
|
integrity sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==
|
||||||
|
dependencies:
|
||||||
|
"@eslint-community/regexpp" "^4.10.0"
|
||||||
|
"@typescript-eslint/scope-manager" "8.18.0"
|
||||||
|
"@typescript-eslint/type-utils" "8.18.0"
|
||||||
|
"@typescript-eslint/utils" "8.18.0"
|
||||||
|
"@typescript-eslint/visitor-keys" "8.18.0"
|
||||||
|
graphemer "^1.4.0"
|
||||||
|
ignore "^5.3.1"
|
||||||
|
natural-compare "^1.4.0"
|
||||||
|
ts-api-utils "^1.3.0"
|
||||||
|
|
||||||
|
"@typescript-eslint/scope-manager@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz#30b040cb4557804a7e2bcc65cf8fdb630c96546f"
|
||||||
|
integrity sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==
|
||||||
|
dependencies:
|
||||||
|
"@typescript-eslint/types" "8.18.0"
|
||||||
|
"@typescript-eslint/visitor-keys" "8.18.0"
|
||||||
|
|
||||||
|
"@typescript-eslint/type-utils@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz#6f0d12cf923b6fd95ae4d877708c0adaad93c471"
|
||||||
|
integrity sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==
|
||||||
|
dependencies:
|
||||||
|
"@typescript-eslint/typescript-estree" "8.18.0"
|
||||||
|
"@typescript-eslint/utils" "8.18.0"
|
||||||
|
debug "^4.3.4"
|
||||||
|
ts-api-utils "^1.3.0"
|
||||||
|
|
||||||
|
"@typescript-eslint/types@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.18.0.tgz#3afcd30def8756bc78541268ea819a043221d5f3"
|
||||||
|
integrity sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==
|
||||||
|
|
||||||
|
"@typescript-eslint/typescript-estree@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz#d8ca785799fbb9c700cdff1a79c046c3e633c7f9"
|
||||||
|
integrity sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==
|
||||||
|
dependencies:
|
||||||
|
"@typescript-eslint/types" "8.18.0"
|
||||||
|
"@typescript-eslint/visitor-keys" "8.18.0"
|
||||||
|
debug "^4.3.4"
|
||||||
|
fast-glob "^3.3.2"
|
||||||
|
is-glob "^4.0.3"
|
||||||
|
minimatch "^9.0.4"
|
||||||
|
semver "^7.6.0"
|
||||||
|
ts-api-utils "^1.3.0"
|
||||||
|
|
||||||
|
"@typescript-eslint/utils@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.18.0.tgz#48f67205d42b65d895797bb7349d1be5c39a62f7"
|
||||||
|
integrity sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==
|
||||||
|
dependencies:
|
||||||
|
"@eslint-community/eslint-utils" "^4.4.0"
|
||||||
|
"@typescript-eslint/scope-manager" "8.18.0"
|
||||||
|
"@typescript-eslint/types" "8.18.0"
|
||||||
|
"@typescript-eslint/typescript-estree" "8.18.0"
|
||||||
|
|
||||||
|
"@typescript-eslint/visitor-keys@8.18.0":
|
||||||
|
version "8.18.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz#7b6d33534fa808e33a19951907231ad2ea5c36dd"
|
||||||
|
integrity sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==
|
||||||
|
dependencies:
|
||||||
|
"@typescript-eslint/types" "8.18.0"
|
||||||
|
eslint-visitor-keys "^4.2.0"
|
||||||
|
|
||||||
"@vitejs/plugin-vue@^4.1.0":
|
"@vitejs/plugin-vue@^4.1.0":
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz"
|
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz"
|
||||||
|
@ -465,6 +547,20 @@ brace-expansion@^1.1.7:
|
||||||
balanced-match "^1.0.0"
|
balanced-match "^1.0.0"
|
||||||
concat-map "0.0.1"
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
brace-expansion@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
|
||||||
|
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
|
||||||
|
braces@^3.0.3:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
||||||
|
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
|
||||||
|
dependencies:
|
||||||
|
fill-range "^7.1.1"
|
||||||
|
|
||||||
braces@~3.0.2:
|
braces@~3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
|
resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
|
||||||
|
@ -620,7 +716,7 @@ echarts@^5.4.2:
|
||||||
tslib "2.3.0"
|
tslib "2.3.0"
|
||||||
zrender "5.4.3"
|
zrender "5.4.3"
|
||||||
|
|
||||||
element-plus@^2.7.6, element-plus@^2.9.0:
|
element-plus@^2.9.0:
|
||||||
version "2.9.0"
|
version "2.9.0"
|
||||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.0.tgz#76a16566ab6dbadb555a40704bde870a02c306bc"
|
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.0.tgz#76a16566ab6dbadb555a40704bde870a02c306bc"
|
||||||
integrity sha512-ccOFXKsauo2dtokAr4OX7gZsb7TuAoVxA2zGRZo5o2yyDDBLBaZxOoFQPoxITSLcHbBfQuNDGK5Iag5hnyKkZA==
|
integrity sha512-ccOFXKsauo2dtokAr4OX7gZsb7TuAoVxA2zGRZo5o2yyDDBLBaZxOoFQPoxITSLcHbBfQuNDGK5Iag5hnyKkZA==
|
||||||
|
@ -705,6 +801,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0:
|
||||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz"
|
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz"
|
||||||
integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
|
integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
|
||||||
|
|
||||||
|
eslint-visitor-keys@^3.4.3:
|
||||||
|
version "3.4.3"
|
||||||
|
resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
|
||||||
|
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||||
|
|
||||||
|
eslint-visitor-keys@^4.2.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
|
||||||
|
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
|
||||||
|
|
||||||
eslint@^8.38.0:
|
eslint@^8.38.0:
|
||||||
version "8.38.0"
|
version "8.38.0"
|
||||||
resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz"
|
resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz"
|
||||||
|
@ -794,6 +900,17 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
||||||
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
|
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
|
||||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||||
|
|
||||||
|
fast-glob@^3.3.2:
|
||||||
|
version "3.3.2"
|
||||||
|
resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
|
||||||
|
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
|
||||||
|
dependencies:
|
||||||
|
"@nodelib/fs.stat" "^2.0.2"
|
||||||
|
"@nodelib/fs.walk" "^1.2.3"
|
||||||
|
glob-parent "^5.1.2"
|
||||||
|
merge2 "^1.3.0"
|
||||||
|
micromatch "^4.0.4"
|
||||||
|
|
||||||
fast-json-stable-stringify@^2.0.0:
|
fast-json-stable-stringify@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
|
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
|
||||||
|
@ -830,6 +947,13 @@ fill-range@^7.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
to-regex-range "^5.0.1"
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
|
fill-range@^7.1.1:
|
||||||
|
version "7.1.1"
|
||||||
|
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
|
||||||
|
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
|
||||||
|
dependencies:
|
||||||
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
find-up@^5.0.0:
|
find-up@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
|
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
|
||||||
|
@ -903,6 +1027,13 @@ get-intrinsic@^1.0.2:
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
has-symbols "^1.0.3"
|
has-symbols "^1.0.3"
|
||||||
|
|
||||||
|
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||||
|
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||||
|
dependencies:
|
||||||
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
glob-parent@^6.0.2:
|
glob-parent@^6.0.2:
|
||||||
version "6.0.2"
|
version "6.0.2"
|
||||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
|
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
|
||||||
|
@ -910,13 +1041,6 @@ glob-parent@^6.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-glob "^4.0.3"
|
is-glob "^4.0.3"
|
||||||
|
|
||||||
glob-parent@~5.1.2:
|
|
||||||
version "5.1.2"
|
|
||||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
|
||||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
|
||||||
dependencies:
|
|
||||||
is-glob "^4.0.1"
|
|
||||||
|
|
||||||
glob@^7.1.3:
|
glob@^7.1.3:
|
||||||
version "7.2.3"
|
version "7.2.3"
|
||||||
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
|
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
|
||||||
|
@ -953,6 +1077,11 @@ grapheme-splitter@^1.0.4:
|
||||||
resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
|
resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
|
||||||
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
|
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
|
||||||
|
|
||||||
|
graphemer@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
|
||||||
|
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
|
||||||
|
|
||||||
has-flag@^4.0.0:
|
has-flag@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
||||||
|
@ -975,6 +1104,11 @@ ignore@^5.2.0:
|
||||||
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
|
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
|
||||||
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
|
integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
|
||||||
|
|
||||||
|
ignore@^5.3.1:
|
||||||
|
version "5.3.2"
|
||||||
|
resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
||||||
|
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
|
||||||
|
|
||||||
immutable@^4.0.0:
|
immutable@^4.0.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz"
|
resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz"
|
||||||
|
@ -1144,6 +1278,19 @@ memoize-one@^6.0.0:
|
||||||
resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz"
|
resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz"
|
||||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||||
|
|
||||||
|
merge2@^1.3.0:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
|
||||||
|
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
|
||||||
|
|
||||||
|
micromatch@^4.0.4:
|
||||||
|
version "4.0.8"
|
||||||
|
resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
|
||||||
|
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
|
||||||
|
dependencies:
|
||||||
|
braces "^3.0.3"
|
||||||
|
picomatch "^2.3.1"
|
||||||
|
|
||||||
mime-db@1.52.0:
|
mime-db@1.52.0:
|
||||||
version "1.52.0"
|
version "1.52.0"
|
||||||
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
|
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
|
||||||
|
@ -1163,6 +1310,13 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion "^1.1.7"
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
minimatch@^9.0.4:
|
||||||
|
version "9.0.5"
|
||||||
|
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
|
||||||
|
integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^2.0.1"
|
||||||
|
|
||||||
mitt@^3.0.0:
|
mitt@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz"
|
resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz"
|
||||||
|
@ -1275,7 +1429,7 @@ picocolors@^1.0.0:
|
||||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
|
||||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||||
|
|
||||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2:
|
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
|
||||||
version "2.3.1"
|
version "2.3.1"
|
||||||
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
||||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||||
|
@ -1425,6 +1579,11 @@ semver@^7.3.5, semver@^7.3.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
lru-cache "^6.0.0"
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
|
semver@^7.6.0:
|
||||||
|
version "7.6.3"
|
||||||
|
resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||||
|
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||||
|
|
||||||
shebang-command@^2.0.0:
|
shebang-command@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
|
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
|
||||||
|
@ -1514,6 +1673,11 @@ to-regex-range@^5.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-number "^7.0.0"
|
is-number "^7.0.0"
|
||||||
|
|
||||||
|
ts-api-utils@^1.3.0:
|
||||||
|
version "1.4.3"
|
||||||
|
resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
|
||||||
|
integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
|
||||||
|
|
||||||
tslib@2.3.0:
|
tslib@2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
|
resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
|
||||||
|
@ -1613,7 +1777,7 @@ vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1:
|
||||||
axios "^1.3.5"
|
axios "^1.3.5"
|
||||||
dayjs "^1.11.13"
|
dayjs "^1.11.13"
|
||||||
echarts "^5.4.2"
|
echarts "^5.4.2"
|
||||||
element-plus "^2.7.6"
|
element-plus "^2.9.0"
|
||||||
file-saver "^2.0.5"
|
file-saver "^2.0.5"
|
||||||
js-cookie "^3.0.1"
|
js-cookie "^3.0.1"
|
||||||
mitt "^3.0.0"
|
mitt "^3.0.0"
|
||||||
|
@ -1626,7 +1790,7 @@ vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1:
|
||||||
vue "^3.2.47"
|
vue "^3.2.47"
|
||||||
vue-clipboard3 "^2.0.0"
|
vue-clipboard3 "^2.0.0"
|
||||||
vue-demi "^0.13.11"
|
vue-demi "^0.13.11"
|
||||||
vue-next-admin-template-js "file:C:/Users/Administrator/AppData/Local/Yarn/Cache/v6/npm-vue-next-admin-template-js-2.4.33-d6f20349-ce84-4f4c-b83e-27e36d4b1985-1733992643913/node_modules/vue-next-admin-template-js"
|
vue-next-admin-template-js "file:C:/Users/Administrator/AppData/Local/Yarn/Cache/v6/npm-vue-next-admin-template-js-2.4.33-011778b8-7ab9-4593-988c-c7383c933ad9-1734079258926/node_modules/vue-next-admin-template-js"
|
||||||
vue-router "^4.1.6"
|
vue-router "^4.1.6"
|
||||||
xlsx "^0.18.5"
|
xlsx "^0.18.5"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue