Compare commits

..

No commits in common. "qiankun-demo" and "master" have entirely different histories.

23 changed files with 93 additions and 423 deletions

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/favicon.ico" />
<title>网关采集配置器</title>
<script type="module" src="/js/config.js"></script>
<script src="./js/config.js"></script>
</head>
<body>
<div id="app"></div>

View File

@ -24,7 +24,6 @@
"qs": "^6.11.1",
"screenfull": "^6.0.2",
"sortablejs": "^1.15.0",
"vite-plugin-qiankun": "^1.0.15",
"vue": "^3.2.47",
"vue-clipboard3": "^2.0.0",
"vue-demi": "^0.13.11",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -14,5 +14,3 @@ window.baseConfig = {
protocol: 'http://',
wsProtocol: 'ws://'
}
localStorage.setItem('baseConfig', JSON.stringify(window.baseConfig));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -16,12 +16,10 @@ import { useRoutesList } from '/@/stores/routesList';
import { useThemeConfig } from '/@/stores/themeConfig';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import mittBus from '/@/utils/mitt';
import { useRoute } from 'vue-router';
//
const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
const Vertical = defineAsyncComponent(() => import('/@/layout/navMenu/vertical.vue'));
const route = useRoute();
//
const layoutAsideScrollbarRef = ref();
@ -71,13 +69,6 @@ const setCollapseStyle = computed(() => {
// / logo
const setShowLogo = computed(() => {
let { layout, isShowLogo } = themeConfig.value;
let hideHeader = JSON.parse(localStorage.getItem('hideHeader'));
if(hideHeader!==null){
isShowLogo = hideHeader?true:false;
}
if(route.query.hideHeader!=undefined){
isShowLogo = route.query.hideHeader!='true'?true:false;
}
return (isShowLogo && layout === 'defaults') || (isShowLogo && layout === 'columns');
});
//

View File

@ -26,16 +26,16 @@ const onLayoutResize = () => {
if (!Local.get('oldLayout')) Local.set('oldLayout', themeConfig.value.layout);
const clientWidth = document.body.clientWidth;
if (clientWidth < 1000) {
// themeConfig.value.isCollapse = false;
// mittBus.emit('layoutMobileResize', {
// layout: 'defaults',
// clientWidth,
// });
themeConfig.value.isCollapse = false;
mittBus.emit('layoutMobileResize', {
layout: 'defaults',
clientWidth,
});
} else {
// mittBus.emit('layoutMobileResize', {
// layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
// clientWidth,
// });
mittBus.emit('layoutMobileResize', {
layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
clientWidth,
});
}
};
//

View File

@ -12,7 +12,7 @@
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import logoMini from '/@/assets/logo-mini.png';
import logoMini from '/@/assets/logo-mini.svg';
//
const storesThemeConfig = useThemeConfig();
@ -52,9 +52,8 @@ const onThemeConfigChange = () => {
}
}
&-medium-img {
width: 35px;
width: 20px;
margin-right: 5px;
height: 35px;
}
}
.layout-logo-size {

View File

@ -11,7 +11,7 @@
</template>
<script setup name="layoutDefaults">
import { defineAsyncComponent, watch, onMounted, nextTick, ref, getCurrentInstance } from 'vue';
import { defineAsyncComponent, watch, onMounted, nextTick, ref } from 'vue';
import { useRoute } from 'vue-router';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
@ -49,12 +49,9 @@ const initScrollBarHeight = () => {
};
//
onMounted(() => {
console.log("route",route)
initScrollBarHeight();
NextLoading.done(600);
let hideHeader = JSON.parse(localStorage.getItem('hideHeader'));
if(hideHeader!==null){
isShowHeader.value = hideHeader?false:true;
}
});
//
watch(
@ -68,10 +65,8 @@ watch(
watch(
() => route.query,
(newQuery) => {
// hideHeader=true
if(newQuery.hideHeader!=undefined){
isShowHeader.value = newQuery.hideHeader!='true'?true:false;
}
// hideHeader=true
isShowHeader.value = newQuery.hideHeader !== 'true';
},
{ immediate: true }
);

View File

@ -6,20 +6,20 @@
:size="16"
@click="onThemeConfigChange"
/>
<!-- <el-breadcrumb class="layout-navbars-breadcrumb-hide">-->
<!-- <transition-group name="breadcrumb">-->
<!-- <el-breadcrumb-item v-for="(v, k) in state.breadcrumbList" :key="!v.meta.tagsViewName ? v.meta.title : v.meta.tagsViewName">-->
<!-- <span v-if="k === state.breadcrumbList.length - 1" class="layout-navbars-breadcrumb-span">-->
<!-- <SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />-->
<!-- <div v-if="!v.meta.tagsViewName">{{ v.meta.title }}</div>-->
<!-- <div v-else>{{ v.meta.tagsViewName }}</div>-->
<!-- </span>-->
<!-- <a v-else @click.prevent="onBreadcrumbClick(v)">-->
<!-- <SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />{{ v.meta.title }}-->
<!-- </a>-->
<!-- </el-breadcrumb-item>-->
<!-- </transition-group>-->
<!-- </el-breadcrumb>-->
<el-breadcrumb class="layout-navbars-breadcrumb-hide">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(v, k) in state.breadcrumbList" :key="!v.meta.tagsViewName ? v.meta.title : v.meta.tagsViewName">
<span v-if="k === state.breadcrumbList.length - 1" class="layout-navbars-breadcrumb-span">
<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />
<div v-if="!v.meta.tagsViewName">{{ v.meta.title }}</div>
<div v-else>{{ v.meta.tagsViewName }}</div>
</span>
<a v-else @click.prevent="onBreadcrumbClick(v)">
<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />{{ v.meta.title }}
</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</div>
</template>

View File

@ -3,9 +3,7 @@
<router-view v-slot="{ Component }">
<transition :name="setTransitionName" mode="out-in">
<keep-alive :include="getKeepAliveNames">
<div class="w100" :key="state.refreshRouterViewKey">
<component :is="Component" style="padding: 10px" v-show="!isIframePage"></component>
</div>
<component style="padding: 10px" :is="Component" :key="state.refreshRouterViewKey" class="w100" v-show="!isIframePage" />
</keep-alive>
</transition>
</router-view>

View File

@ -7,76 +7,10 @@ import other from '/@/utils/other';
import ElementPlus from 'element-plus';
import '/@/theme/index.scss';
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
// const app = createApp(App);
const app = createApp(App);
let app;
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
app = createApp(App);
directive(app);
other.elSvg(app);
app.use(pinia).use(router).use(ElementPlus).mount('#app');
} else {
renderWithQiankun({
// 子应用挂载
mount(props) {
console.log("props",props.hideHeader)
app = createApp(App);
directive(app);
other.elSvg(app);
app.use(pinia).use(router).use(ElementPlus).mount(props.container.querySelector('#app'));
directive(app);
other.elSvg(app);
if(props.hideHeader!==undefined){
console.log("1111")
localStorage.setItem('hideHeader', props.hideHeader);
}
},
// 只有子应用第一次加载会触发
bootstrap() {
console.log('vue app bootstrap');
},
// 更新
update() {
console.log('vue app update');
},
// 卸载
unmount() {
console.log('vue app unmount');
app?.unmount();
}
});
}
// let app;
// if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
// createApp(App).use(pinia).use(router).use(ElementPlus).mount('#app');
// } else {
// renderWithQiankun({
// // 子应用挂载
// mount(props) {
// app = createApp(App);
// directive(app);
// other.elSvg(app);
// app.use(pinia).use(router).use(ElementPlus).mount(props.container.querySelector('#app'));
// },
// // 只有子应用第一次加载会触发
// bootstrap() {
// console.log('vue app bootstrap');
// },
// // 更新
// update() {
// console.log('vue app update');
// },
// // 卸载
// unmount() {
// console.log('vue app unmount');
// app?.unmount();
// }
// });
// }
// directive(app);
// other.elSvg(app);
// app.use(pinia).use(router).use(ElementPlus).mount('#app');
app.use(pinia).use(router).use(ElementPlus).mount('#app');

View File

@ -31,7 +31,7 @@ const { isRequestRoutes } = themeConfig.value;
* @link 参考https://next.router.vuejs.org/zh/api/#createrouter
*/
export const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
history: createWebHistory(),
/**
* 说明
* 1notFoundAndNoPower 默认添加 404401 界面防止一直提示 No match found for location with path 'xxx'

View File

@ -25,7 +25,7 @@ export const dynamicRoutes = [
component: () => import('/@/layout/index.vue'),
redirect: '/southdirection',
meta: {
// isKeepAlive: true,
isKeepAlive: true,
},
children: [
// {

View File

@ -78,7 +78,7 @@ export const useThemeConfig = defineStore('themeConfig', {
* 界面显示
*/
// 是否开启侧边栏 Logo
isShowLogo: true,
isShowLogo: false,
// 初始化变量,用于 el-scrollbar 的高度更新,请勿删除
isShowLogoChange: false,
// 是否开启 Breadcrumb强制经典、横向布局不显示

View File

@ -3,15 +3,9 @@ import { ElMessage, ElMessageBox } from 'element-plus';
import qs from 'qs';
import { Session } from '/@/utils/storage';
let config = null;
if(window.baseConfig){
config = window.baseConfig;
}else{
config = JSON.parse(localStorage.getItem('baseConfig'));
}
// 配置新建一个 axios 实例
const service = axios.create({
baseURL: `${config.protocol}${config.ip}${config.port ? ':'+config.port : ''}${config.prodApi ? config.prodApi : ''}`,
baseURL: `${window.baseConfig.protocol}${window.baseConfig.ip}${window.baseConfig.port ? ':'+window.baseConfig.port : ''}${window.baseConfig.prodApi ? window.baseConfig.prodApi : ''}`,
timeout: 50000,
headers: { 'Content-Type': 'application/json' },
paramsSerializer: {

View File

@ -1,5 +1,5 @@
// 字体图标 url
const cssCdnUrlList = ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css'];
const cssCdnUrlList = ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'];
// 第三方 js url
const jsCdnUrlList = [];

View File

@ -71,14 +71,9 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted, watch } from 'vue';
import { ref, onMounted, onUnmounted } from 'vue';
import { ElMessage } from 'element-plus';
import { endDeviceCollect, getDeviceCollectli, getDeviceEquipli, startDeviceCollect } from '/@/api/gateway/collectdatamonitor';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
const storesThemeConfig = useThemeConfig();
const { themeConfig } = storeToRefs(storesThemeConfig);
const deviceConfigTableRef = ref();
const deviceDataTableRef = ref();
@ -222,19 +217,9 @@ const deviceConfigClick = (e) => {
//
const handleResize = () => {
deviceDataTableRef.value.doLayout();
tabelBox.value = themeConfig.value.isCollapse?window.innerWidth - 64 - 10:window.innerWidth - 180 - 10;
tabelBox.value = window.innerWidth - 180 - 10;
};
watch(
() => themeConfig.value.isCollapse,
() => {
handleResize();
},
{
deep: true,
}
);
onMounted(() => {
window.addEventListener('resize', handleResize);
getDeviceList();

View File

@ -113,10 +113,10 @@
</div>
</div>
<div class="data-config">
<h2>上报测点 {{ activeTask.taskId}}</h2>
<h2>上报测点 {{ activeDeviceConfig.taskId }}</h2>
<div class="table-box">
<el-table
:data="activeTask.dataIdEntire"
:data="activeDeviceConfig.dataIdEntire"
border
size="small"
height="100%"
@ -132,7 +132,7 @@
</div>
</div>
<el-dialog v-model="collectionModelShow" title="加解密配置" width="500">
<el-dialog v-model="collectionModelShow" title="加解密配置" width="500" :before-close="handleClose">
<el-form ref="collectionRef" :model="collectionForm" label-width="auto" status-icon>
<h3>加密算法配置</h3>
<el-form-item label="启动">
@ -249,11 +249,7 @@
import { reactive, ref, onMounted, onUnmounted, computed, watch } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { getPlatformConf, setPlatformConf } from '/@/api/gateway/northboundtask';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
const storesThemeConfig = useThemeConfig();
const { themeConfig } = storeToRefs(storesThemeConfig);
//
const uploadModeList = ref([
{ value: 'timer 10', link: 'timer 10' },
@ -365,6 +361,7 @@ const delDeviceConfig = (index) => {
};
const getDeviceConfig = () => {
console.log('获取配置');
getPlatformConf({})
.then((response) => {
//
@ -391,17 +388,15 @@ const getDeviceConfig = () => {
}) || [];
// taskList.value = taskDataList;
console.log('格式化后数据', taskList.value);
// debugger
if (!platConfigList.value.length) {
addDeviceConfig();
}
if (taskList.value.length) {
if (taskList.value.length > ActiveRowIndex.value) {
activeTask.value = taskList.value[ActiveRowIndex.value];
if (platConfigList.value.length) {
if (platConfigList.value.length > ActiveRowIndex.value) {
activeDeviceConfig.value = platConfigList.value[ActiveRowIndex.value];
} else {
activeTask.value = taskList.value[0];
activeDeviceConfig.value = platConfigList.value[0];
}
platConfigTableRef.value.toggleRowSelection(activeTask.value, true);
}
} else {
ElMessage.error(response.message);
@ -483,13 +478,6 @@ const editCollection = () => {
collectionModelShow.value = false;
};
const activeTask = ref({
taskId: '',
dataIdEntire: [],
taskType: '',
uploadMode: 'timer 1 || change 0.1'
});
const activeDeviceConfig = ref({
PlatformIp: '',
tasks: ['T1', 'T2', 'T3', 'T4', 'T5'],
@ -539,23 +527,15 @@ const activeDeviceConfig = ref({
},
});
watch(
() => ({ ...activeDeviceConfig.value }),
(newVal) => {
console.log('数据变化', newVal);
platConfigList.value[ActiveRowIndex.value] = newVal;
},
{ deep: true }
);
watch(
() => ({ ...activeTask.value }),
(newVal) => {
taskList.value[ActiveRowIndex.value] = newVal;
},
{ deep: true }
);
// const saveDeviceDataConfig = () => {
// platConfigList.value[ActiveRowIndex.value] = activeDeviceConfig.value;
// }
@ -569,30 +549,19 @@ const tableRowClassName = ({ row, rowIndex }) => {
//
const taskConfigClick = (e) => {
console.log(`current page:`, e);
// activeDeviceConfig.value = e;
activeTask.value = e;
activeDeviceConfig.value = e;
platConfigTableRef.value.toggleRowSelection(e);
ActiveRowIndex.value = taskList.value.indexOf(e);
ActiveRowIndex.value = platConfigList.value.indexOf(e);
// e.isDoubleClicked = !e.isDoubleClicked;
};
//
const handleResize = () => {
deviceDataTableRef.value.doLayout();
tabelBox.value = themeConfig.value.isCollapse?window.innerWidth - 64 - 10:window.innerWidth - 180 - 10;
tabelBox.value = window.innerWidth - 180 - 10;
};
watch(
() => themeConfig.value.isCollapse,
() => {
handleResize();
},
{
deep: true,
}
);
onMounted(() => {
window.addEventListener('resize', handleResize);
getDeviceConfig();

View File

@ -26,7 +26,7 @@
height="187"
:style="{ width: tabelBox + 'px', background: '#f2f2f2' }"
empty-text="配置为空"
row-key="id"
row-key="index"
@row-click="deviceConfigClick"
>
<el-table-column type="index" label="序号" align="center" width="60" />
@ -85,34 +85,33 @@
size="small"
height="100%"
:style="{ width: tabelBox + 'px' }"
row-key="index"
empty-text="配置为空"
>
<el-table-column type="index" label="序号" align="center" width="60" fixed />
<el-table-column prop="id" label="数据ID" fixed align="center" min-width="120">
<el-table-column prop="id" label="数据ID" fixed align="center">
<template #default="scope">
<el-input v-model="scope.row.id" placeholder="请输入数据ID" />
</template>
</el-table-column>
<el-table-column prop="dataName" label="数据名" fixed align="center" min-width="120">
<el-table-column prop="dataName" label="数据名" fixed align="center">
<template #default="scope">
<el-input v-model="scope.row.dataName" placeholder="请输入数据名" />
</template>
</el-table-column>
<el-table-column prop="dataAddress" label="数据地址" align="center" min-width="120">
<el-table-column prop="dataAddress" label="数据地址" align="center">
<template #default="scope">
<el-input v-model="scope.row.dataAddress" placeholder="请输入数据地址" />
</template>
</el-table-column>
<el-table-column prop="dataDesc" label="描述" align="center" min-width="120">
<el-table-column prop="dataDesc" label="描述" align="center">
<template #default="scope">
<el-input v-model="scope.row.dataDesc" placeholder="请输入描述" />
</template>
</el-table-column>
<el-table-column prop="dataDisplay" label="数据类型" min-width="120" align="center">
<el-table-column prop="dataDisplay" label="数据类型" width="120" align="center">
<template #default="scope">
<el-select v-model="scope.row.dataDisplay" placeholder="请选择数据类型" @change="changedataDisplay($event, scope.$index)">
<el-option v-for="(item,index) in dataTypeArray" :key="index" :value="item.type">{{ item.type }}</el-option>
<el-option v-for="item in dataTypeArray" :key="item.type" :value="item.type">{{ item.type }}</el-option>
<!-- <el-option value="bool">bool</el-option>-->
<!-- <el-option value="int8">int8</el-option>-->
<!-- <el-option value="uint8">uint8</el-option>-->
@ -145,12 +144,12 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="datalen" label="长度(字节)" min-width="80" align="center">
<el-table-column prop="datalen" label="长度(字节)" width="120" align="center">
<template #default="scope">
<el-input v-model="scope.row.datalen" type="number" :disabled="!scope.row.datalenShow" placeholder="请输入长度(字节)" />
</template>
</el-table-column>
<el-table-column prop="dataUnit" label="单位" min-width="70" align="center">
<el-table-column prop="dataUnit" label="单位" width="70" align="center">
<template #default="scope">
<el-input v-model="scope.row.dataUnit" placeholder="请输入单位" />
</template>
@ -164,22 +163,22 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="proportion" label="比例" min-width="80" align="center">
<el-table-column prop="proportion" label="比例" width="70" align="center">
<template #default="scope">
<el-input v-model="scope.row.proportion" placeholder="请输入比例" />
</template>
</el-table-column>
<el-table-column prop="offset" label="偏置" min-width="60" align="center">
<el-table-column prop="offset" label="偏置" width="60" align="center">
<template #default="scope">
<el-input v-model="scope.row.offset" placeholder="请输入偏置" />
</template>
</el-table-column>
<el-table-column prop="northCalcParam.decimal.numBits" label="小数位" min-width="60" align="center">
<el-table-column prop="northCalcParam.decimal.numBits" label="小数位" width="60" align="center">
<template #default="scope">
<el-input v-model="scope.row.northCalcParam.decimal.numBits" placeholder="请输入小数位" />
</template>
</el-table-column>
<el-table-column prop="northCalcParam.decimal.way" label="取整" width="120" align="center">
<el-table-column prop="northCalcParam.decimal.way" label="取整" align="center">
<template #default="scope">
<el-select v-model="scope.row.northCalcParam.decimal.way" placeholder="请选择取整">
<el-option value="rounding" label="四舍五入"></el-option>
@ -206,14 +205,14 @@
<el-switch v-model="scope.row.driveFlag.isConclude_W" />
</template>
</el-table-column>
<el-table-column prop="taskId" label="任务ID" align="center" min-width="80">
<el-table-column prop="taskId" label="任务ID" align="center">
<template #default="scope">
<el-select v-model="scope.row.taskId" placeholder="请选择任务ID" @change="changeTaskId($event, scope.$index)">
<el-option v-for="(item, index) in taskList" :key="index" :value="item.taskId" :label="item.taskId"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="uploadMode" label="上报策略" align="center" min-width="160">
<el-table-column prop="uploadMode" label="上报策略" align="center">
<template #default="scope">
<!-- <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>-->
@ -236,7 +235,7 @@
</div>
</div>
<el-dialog v-model="collectionModelShow" title="采集配置" width="500">
<el-dialog v-model="collectionModelShow" title="采集配置" width="500" :before-close="handleClose">
<el-form ref="collectionRef" :model="collectionForm" label-width="auto" status-icon>
<el-form-item label="启动">
<el-switch v-model="collectionForm.collectConf.isRunCmd" />
@ -365,47 +364,37 @@ import FileSaver from 'file-saver';
import * as XLSX from 'xlsx';
import dayjs from 'dayjs';
import { getDeviceConf, getSerialPortDataList, setDeviceConf } from '/@/api/gateway/southdirection';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
const storesThemeConfig = useThemeConfig();
const { themeConfig } = storeToRefs(storesThemeConfig);
const dataTypeArray = ref([
{ type: 'bool', datalen: 1, show: false },
{ type: 'char', datalen: 1, show: false },
{ type: 'string', datalen: null, show: true },
{ type: 'int8', datalen: 1, show: false },
{ type: 'uint8', datalen: 1, show: false },
{ type: 'int16', datalen: 2, show: false },
{ type: 'uint16', datalen: 2, show: false },
{ type: 'float', datalen: 4, show: false },
{ type: 'int32', datalen: 4, show: false },
{ type: 'uint32', datalen: 4, show: false },
{ type: 'int64', datalen: 8, show: false },
{ type: 'uint64', datalen: 8, show: false },
{ type: 'double', datalen: 8, show: false },
{ type: 'char', datalen: 1, show: false },
{ type: 'string', datalen: null, show: true },
{ type: 'int16_AB', datalen: 2, show: false },
{ type: 'int16_BA', datalen: 2, show: false },
{ type: 'uint16', datalen: 2, show: false },
{ type: 'uint16_AB', datalen: 2, show: false },
{ type: 'uint16_BA', datalen: 2, show: false },
{ type: 'float', datalen: 4, show: false },
{ type: 'float32_ABCD', datalen: 4, show: false },
{ type: 'float32_BADC', datalen: 4, show: false },
{ type: 'float32_CDAB', datalen: 4, show: false },
{ type: 'float32_DCBA', datalen: 4, show: false },
{ type: 'float64_ABCD', datalen: 8, show: false },
{ type: 'float64_BADC', datalen: 8, show: false },
{ type: 'float64_CDAB', datalen: 8, show: false },
{ type: 'float64_DCBA', datalen: 8, show: false },
{ type: 'int32', datalen: 4, show: false },
{ type: 'float_ABCD', datalen: 4, show: false },
{ type: 'float_BADC', datalen: 4, show: false },
{ type: 'float_CDAB', datalen: 4, show: false },
{ type: 'float_DCBA', datalen: 4, show: false },
{ type: 'int32_ABCD', datalen: 4, show: false },
{ type: 'int32_BADC', datalen: 4, show: false },
{ type: 'int32_CDAB', datalen: 4, show: false },
{ type: 'int32_DCBA', datalen: 4, show: false },
{ type: 'uint32', datalen: 4, show: false },
{ type: 'uint32_ABCD', datalen: 4, show: false },
{ type: 'uint32_BADC', datalen: 4, show: false },
{ type: 'uint32_CDAB', datalen: 4, show: false },
{ type: 'uint32_DCBA', datalen: 4, show: false },
{ type: 'int64', datalen: 8, show: false },
{ type: 'uint64', datalen: 8, show: false },
// { type: 'double', datalen: 8, show: false },
]);
//
@ -434,7 +423,6 @@ const deviceConfigList = ref([]);
const protocolList = ref([
{ label: 'ModbusTCP', value: 'ModbusTCP' },
{ label: 'PluginTCP', value: 'PluginTCP' },
{ label: 'DLT645_2007', value: 'DLT645_2007' },
{ label: 'gycan', value: 'gycan' },
]);
@ -493,6 +481,7 @@ const delDeviceConfig = (index) => {
};
const getDeviceConfig = () => {
console.log('获取配置');
getDeviceConf({})
.then((response) => {
//
@ -501,16 +490,6 @@ const getDeviceConfig = () => {
//
deviceConfigList.value = response.data.equips || [];
taskList.value = response.data.tasks || [];
if(response.data.tasks && response.data.tasks.length > 0 ){
uploadModeList.value = response.data.tasks.map(item=>{
return {
value: item.uploadMode,
link: item.uploadMode,
};
});
}else{
uploadModeList.value = [];
}
if (deviceConfigList.value.length) {
if (deviceConfigList.value.length > ActiveRowIndex.value) {
activeDeviceConfig.value = deviceConfigList.value[ActiveRowIndex.value];
@ -709,7 +688,7 @@ const openConnectModel = (row) => {
}
// getSerialPortList()
dlt645ModelShow.value = true;
} else if (row.protocol.libName === 'ModbusTCP' || row.protocol.libName === 'PluginTCP') {
} else if (row.protocol.libName === 'ModbusTCP') {
tcpForm.value.link = row.interfaceParams.link;
tcpModelShow.value = true;
} else {
@ -753,7 +732,7 @@ const activeDeviceConfig = ref({
authority: 'RW', //
dataAddress: '', //
dataDesc: '', //
dataDisplay: 'uint8', //
dataDisplay: 'int16', //
dataName: '', //
dataUnit: '', //
driveFlag: { isConclude_R: true, isConclude_W: true }, //
@ -779,7 +758,7 @@ const addDeviceDataConfig = () => {
authority: 'RW', //
dataAddress: '', //
dataDesc: '', //
dataDisplay: 'uint8', //
dataDisplay: 'int16', //
datalen: 2, //
datalenShow: false, //
dataName: '', //
@ -842,17 +821,8 @@ const deviceConfigClick = (e, event, column) => {
//
const handleResize = () => {
deviceDataTableRef.value.doLayout();
tabelBox.value = themeConfig.value.isCollapse?window.innerWidth - 64 - 10:window.innerWidth - 180 - 10;
tabelBox.value = window.innerWidth - 180 - 10;
};
watch(
() => themeConfig.value.isCollapse,
() => {
handleResize();
},
{
deep: true,
}
);
const exportDeviceConfigXlsx = () => {
const workbook = XLSX.utils.book_new();

View File

@ -47,7 +47,7 @@ import { defineAsyncComponent, onMounted, reactive, computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import { NextLoading } from '/@/utils/loading';
import logoMini from '/@/assets/logo-mini.png';
import logoMini from '/@/assets/logo-mini.svg';
import loginMain from '/@/assets/login-main.svg';
import loginBg from '/@/assets/login-bg.svg';

View File

@ -4,7 +4,6 @@ import { defineConfig, loadEnv } from 'vite';
import vueSetupExtend from 'vite-plugin-vue-setup-extend-plus';
import viteCompression from 'vite-plugin-compression';
import { buildConfig } from './src/utils/build';
import qiankun from 'vite-plugin-qiankun';
const pathResolve = (dir) => {
return resolve(__dirname, '.', dir);
@ -17,21 +16,16 @@ const alias = {
const viteConfig = defineConfig((mode) => {
const env = loadEnv(mode.mode, process.cwd());
return {
plugins: [vue(), vueSetupExtend(), viteCompression(), JSON.parse(env.VITE_OPEN_CDN) ? buildConfig.cdn() : null,qiankun('gy-gateway', { // 配置qiankun插件
useDevMode: true
})],
plugins: [vue(), vueSetupExtend(), viteCompression(), JSON.parse(env.VITE_OPEN_CDN) ? buildConfig.cdn() : null],
root: process.cwd(),
resolve: { alias },
// base: mode.command === 'serve' ? '/gy-gateway' : '/gy-gateway',
base: mode.command === 'serve' ? '/' : '/',
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
optimizeDeps: {
exclude: ['vue-demi'],
},
server: {
host: '0.0.0.0',
port: env.VITE_PORT,
cors: true,
origin: 'http://localhost:4466',
open: JSON.parse(env.VITE_OPEN),
hmr: true,
proxy: {

158
yarn.lock
View File

@ -597,35 +597,6 @@ chalk@^4.0.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
cheerio-select@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
dependencies:
boolbase "^1.0.0"
css-select "^5.1.0"
css-what "^6.1.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
domutils "^3.0.1"
cheerio@^1.0.0-rc.10:
version "1.0.0"
resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
dependencies:
cheerio-select "^2.1.0"
dom-serializer "^2.0.0"
domhandler "^5.0.3"
domutils "^3.1.0"
encoding-sniffer "^0.2.0"
htmlparser2 "^9.1.0"
parse5 "^7.1.2"
parse5-htmlparser2-tree-adapter "^7.0.0"
parse5-parser-stream "^7.1.2"
undici "^6.19.5"
whatwg-mimetype "^4.0.0"
"chokidar@>=3.0.0 <4.0.0":
version "3.5.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
@ -693,22 +664,6 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0"
which "^2.0.1"
css-select@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
dependencies:
boolbase "^1.0.0"
css-what "^6.1.0"
domhandler "^5.0.2"
domutils "^3.0.1"
nth-check "^2.0.1"
css-what@^6.1.0:
version "6.1.0"
resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
@ -753,36 +708,6 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
dom-serializer@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
dependencies:
domelementtype "^2.3.0"
domhandler "^5.0.2"
entities "^4.2.0"
domelementtype@^2.3.0:
version "2.3.0"
resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
dependencies:
domelementtype "^2.3.0"
domutils@^3.0.1, domutils@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
dependencies:
dom-serializer "^2.0.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
echarts@^5.4.2:
version "5.4.2"
resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz"
@ -812,19 +737,6 @@ element-plus@^2.9.0:
memoize-one "^6.0.0"
normalize-wheel-es "^1.2.0"
encoding-sniffer@^0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
dependencies:
iconv-lite "^0.6.3"
whatwg-encoding "^3.1.1"
entities@^4.2.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
esbuild@^0.17.5:
version "0.17.16"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz"
@ -1187,23 +1099,6 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
htmlparser2@^9.1.0:
version "9.1.0"
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
dependencies:
domelementtype "^2.3.0"
domhandler "^5.0.3"
domutils "^3.1.0"
entities "^4.5.0"
iconv-lite@0.6.3, iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
ignore@^5.2.0:
version "5.2.4"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
@ -1509,28 +1404,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
parse5-htmlparser2-tree-adapter@^7.0.0:
version "7.1.0"
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
dependencies:
domhandler "^5.0.3"
parse5 "^7.0.0"
parse5-parser-stream@^7.1.2:
version "7.1.2"
resolved "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
dependencies:
parse5 "^7.0.0"
parse5@^7.0.0, parse5@^7.1.2:
version "7.2.1"
resolved "https://registry.npmmirror.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
dependencies:
entities "^4.5.0"
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
@ -1680,11 +1553,6 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.62.0:
version "1.62.0"
resolved "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz"
@ -1827,11 +1695,6 @@ type-fest@^0.20.2:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
undici@^6.19.5:
version "6.21.0"
resolved "https://registry.npmmirror.com/undici/-/undici-6.21.0.tgz#4b3d3afaef984e07b48e7620c34ed8a285ed4cd4"
integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
@ -1865,13 +1728,6 @@ vite-plugin-compression@^0.5.1:
debug "^4.3.3"
fs-extra "^10.0.0"
vite-plugin-qiankun@^1.0.15:
version "1.0.15"
resolved "https://registry.npmmirror.com/vite-plugin-qiankun/-/vite-plugin-qiankun-1.0.15.tgz#862bb6935c50db31536cf322e13f3bf59e1adace"
integrity sha512-0QB0Wr8Eu/LGcuJAfuNXDb7BAFDszo3GCxq4bzgXdSFAlK425u1/UGMxaDEBVA1uPFrLsZPzig83Ufdfl6J45A==
dependencies:
cheerio "^1.0.0-rc.10"
vite-plugin-vue-setup-extend-plus@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/vite-plugin-vue-setup-extend-plus/-/vite-plugin-vue-setup-extend-plus-0.1.0.tgz"
@ -1934,7 +1790,7 @@ vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1:
vue "^3.2.47"
vue-clipboard3 "^2.0.0"
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-8ec8791a-74be-4d31-8079-f4b86c63ede4-1734080848678/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"
xlsx "^0.18.5"
@ -1956,18 +1812,6 @@ vue@^3.2.47:
"@vue/server-renderer" "3.2.47"
"@vue/shared" "3.2.47"
whatwg-encoding@^3.1.1:
version "3.1.1"
resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==
dependencies:
iconv-lite "0.6.3"
whatwg-mimetype@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a"
integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
which@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"