10 Commits
dev ... test

Author SHA1 Message Date
tianyongbao
64c165e394 fix: 监测曲线功能优化。 2026-01-11 16:24:39 +08:00
tianyongbao
6613a0651b fix:功能进一步优化。 2026-01-10 02:02:28 +08:00
tianyongbao
bccb7d93e3 fix: 功能完善。 2026-01-10 02:02:12 +08:00
tianyongbao
621fee41a4 Merge branch 'dev' into test 2025-12-14 23:17:30 +08:00
tianyongbao
d3403d02f9 feat: 新功能开发,页面开发。 2025-11-05 00:45:11 +08:00
tianyongbao
6eefc67046 feat: 新功能开发,设备实时数据查看等。 2025-11-05 00:45:07 +08:00
tianyongbao
7e8ef7aa0f feat: 新功能开发,设备告警信息、设备实时数据查看等。 2025-10-30 11:22:19 +08:00
tianyongbao
6da46f87ad fix: 登录页,去掉租户选择。 2025-10-24 20:42:33 +08:00
tianyongbao
e9be8f13ed fix: 首页功能优化。 2025-10-24 20:42:13 +08:00
tianyongbao
3b39f9f3f3 feat:功能优化,设备报警信息、微信缓存用户,操作记录信息,代码提交。 2025-10-24 20:42:09 +08:00
4 changed files with 31 additions and 26 deletions

View File

@@ -19,8 +19,6 @@ declare module 'vue' {
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
@@ -37,17 +35,13 @@ declare module 'vue' {
ElForm: typeof import('element-plus/es')['ElForm'] ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon'] ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput'] ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElLink: typeof import('element-plus/es')['ElLink']
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
@@ -58,19 +52,13 @@ declare module 'vue' {
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElText: typeof import('element-plus/es')['ElText']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree'] ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload']
FileUpload: typeof import('./../components/FileUpload/index.vue')['default'] FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
FlowChart: typeof import('./../components/Process/flowChart.vue')['default'] FlowChart: typeof import('./../components/Process/flowChart.vue')['default']
FlowChartImg: typeof import('./../components/Process/flowChartImg.vue')['default'] FlowChartImg: typeof import('./../components/Process/flowChartImg.vue')['default']
Hamburger: typeof import('./../components/Hamburger/index.vue')['default'] Hamburger: typeof import('./../components/Hamburger/index.vue')['default']
IconSelect: typeof import('./../components/IconSelect/index.vue')['default'] IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
IFrame: typeof import('./../components/iFrame/index.vue')['default'] IFrame: typeof import('./../components/iFrame/index.vue')['default']
ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default'] ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default'] ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

View File

@@ -404,7 +404,8 @@ const updateChart = () => {
const day = String(date.getDate()).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0');
return `${month}-${day} ${hours}:${minutes}`; const seconds = String(date.getSeconds()).padStart(2, '0');
return `${month}-${day} ${hours}:${minutes}:${seconds}`;
}); });
const yData = historyData.value.map(item => { const yData = historyData.value.map(item => {
@@ -437,7 +438,8 @@ const updateChart = () => {
data: xData, data: xData,
axisLabel: { axisLabel: {
interval: Math.floor(xData.length / 20), // 控制显示密度 interval: Math.floor(xData.length / 20), // 控制显示密度
rotate: 0 rotate: 20, // 倾斜45度
fontSize: 11
} }
}, },
yAxis: { yAxis: {
@@ -453,6 +455,8 @@ const updateChart = () => {
type: chartType.value, type: chartType.value,
data: yData, data: yData,
smooth: chartType.value === 'line', smooth: chartType.value === 'line',
symbol: 'circle', // 使用圆形标记
symbolSize: chartType.value === 'line' ? 0 : 6, // 折线图默认不显示点,柱状图不受影响
itemStyle: { itemStyle: {
color: config.color color: config.color
}, },
@@ -461,6 +465,17 @@ const updateChart = () => {
} : undefined, } : undefined,
areaStyle: chartType.value === 'line' ? { areaStyle: chartType.value === 'line' ? {
opacity: 0.1 opacity: 0.1
} : undefined,
emphasis: chartType.value === 'line' ? {
symbol: 'circle',
symbolSize: 12,
itemStyle: {
color: config.color,
borderColor: '#fff',
borderWidth: 3,
shadowBlur: 8,
shadowColor: config.color
}
} : undefined } : undefined
} }
] ]
@@ -527,6 +542,8 @@ const handleDeviceSelect = (device: DeviceVO) => {
selectedDevice.value = device; selectedDevice.value = device;
queryParams.value.serialNum = device.serialNum; queryParams.value.serialNum = device.serialNum;
deviceSelectVisible.value = false; deviceSelectVisible.value = false;
// 选择设备后自动查询
getHistoryList();
}; };
/** 取消设备选择 */ /** 取消设备选择 */

View File

@@ -6,10 +6,10 @@
<lang-select /> <lang-select />
</div> --> </div> -->
<el-form-item v-if="tenantEnabled" prop="tenantId"> <el-form-item v-if="tenantEnabled" prop="tenantId">
<el-select v-model="loginForm.tenantId" filterable :placeholder="proxy.$t('login.selectPlaceholder')" style="width: 100%"> <!-- <el-select v-model="loginForm.tenantId" filterable :placeholder="proxy.$t('login.selectPlaceholder')" style="width: 100%">-->
<el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"></el-option> <!-- <el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"></el-option>-->
<template #prefix><svg-icon icon-class="company" class="el-input__icon input-icon" /></template> <!-- <template #prefix><svg-icon icon-class="company" class="el-input__icon input-icon" /></template>-->
</el-select> <!-- </el-select>-->
</el-form-item> </el-form-item>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="proxy.$t('login.username')"> <el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="proxy.$t('login.username')">
@@ -87,8 +87,8 @@ const { t } = useI18n();
const loginForm = ref<LoginData>({ const loginForm = ref<LoginData>({
tenantId: '111111', tenantId: '111111',
username: 'admin', username: 'fishery',
password: 'admin123', password: 'fishery@123',
rememberMe: false, rememberMe: false,
code: '', code: '',
uuid: '' uuid: ''
@@ -216,7 +216,7 @@ const doSocialLogin = (type: string) => {
onMounted(() => { onMounted(() => {
getCode(); getCode();
initTenantList(); // initTenantList();
getLoginData(); getLoginData();
}); });
</script> </script>

View File

@@ -24,8 +24,8 @@ export default defineConfig(({ mode, command }) => {
open: true, open: true,
proxy: { proxy: {
[env.VITE_APP_BASE_API]: { [env.VITE_APP_BASE_API]: {
target: 'http://localhost:8080', // target: 'http://localhost:8080',
// target: 'https://www.qdintc.com/fishery-api/', target: 'https://www.qdintc.com/fishery-api/',
changeOrigin: true, changeOrigin: true,
ws: true, ws: true,
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '') rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')