大屏、智慧物联

This commit is contained in:
jiayu 2025-04-30 18:37:55 +08:00
parent 45cb049d48
commit 5955e02a77
218 changed files with 20321 additions and 151 deletions

View File

@ -1,4 +1,5 @@
NODE_ENV=development
VITE_APP_TITLE='数字乡村云平台'
VITE_APP_API_URL='http://192.168.34.155:1024'
# VITE_APP_API_URL='http://jxjzw.zhgdyun.com:11026'
VITE_MQTT_URL='ws://jxj.zhgdyun.com:8083/mqtt'

View File

@ -1,4 +1,4 @@
NODE_ENV=production
VITE_APP_TITLE='数字乡村云平台'
VITE_APP_API_URL='https://preview.smartadmin.vip/smart-admin-api'
VITE_APP_API_URL='http://jxjzw.zhgdyun.com:11026'
VITE_MQTT_URL='ws://jxj.zhgdyun.com:8083/mqtt'

View File

@ -16,6 +16,11 @@
/>
<title> %VITE_APP_TITLE%</title>
<link rel="icon" href="/favicon.ico"/>
<script src="/lib/jquery-1.12.4.min.js"></script>
<script src="/lib/jsencrypt.min.js"></script>
<script src="/lib/jsWebControl-1.0.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
<div id="app"></div>

View File

@ -30,6 +30,7 @@
"diff": "5.2.0",
"diff2html": "3.4.47",
"echarts": "5.4.3",
"ezuikit-js": "^8.1.7",
"highlight.js": "11.8.0",
"lodash": "4.17.21",
"lunar-javascript": "1.6.12",
@ -42,6 +43,7 @@
"swiper": "^11.2.3",
"ua-parser-js": "1.0.35",
"v-viewer": "~1.6.4",
"video.js": "^8.22.0",
"vue": "3.4.27",
"vue-i18n": "9.13.1",
"vue-router": "4.3.2",

5301
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

BIN
public/fonts/AliHYAiHei.ttf Normal file

Binary file not shown.

Binary file not shown.

74
public/lib/jquery-1.12.4.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/lib/jsWebControl-1.0.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/lib/jsencrypt.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,36 @@
import { postRequest, getRequest } from '/@/lib/axios';
export const bigdataApi = {
// 获取村庄列表
queryVillage: () => getRequest('/index/queryVillage'),
// 更新村庄信息
updateVillage: (data) => postRequest('/index/updateVillage', data),
// 获取村庄统计信息
villageByStat: () => getRequest('/index/villageByStat'),
// 获取党员统计信息
partyStat: () => getRequest('/index/partyStat'),
// 获取大屏配置
queryLargeScreenConfigPage: (data) => postRequest('/largeScreenConfig/queryPage', data),
// 获取村庄资源
addLargeScreenConfig: (data) => postRequest('/largeScreenConfig/add', data),
// 更新大屏配置
updateLargeScreenConfig: (data) => postRequest('/largeScreenConfig/update', data),
// 删除大屏配置
deleteLargeScreenConfig: (data) => postRequest('/largeScreenConfig/delete', data),
// 获取天气实时数据
getWeatherLiveData: (data) => postRequest('/getWeatherLiveData', data),
// 获取天气一周数据
getWeatherData: (data) => postRequest('/getWeatherData', data),
// 获取设备在线状态
getDeviceOnline: () => getRequest('/index/getDeviceOnline'),
};

View File

@ -0,0 +1,68 @@
import { postRequest, getRequest, getDownload } from '/@/lib/axios';
export const insectPestSituationApi = {
// 新增虫害情况组 @author jiayu
addGroup: (param) => {
return postRequest('/insectPestSituationGroup/add', param);
},
// 编辑虫害情况组 @author jiayu
updateGroup: (param) => {
return postRequest('/insectPestSituationGroup/update', param);
},
// 查询虫害情况组列表 @author jiayu
listGroup: (param) => {
return postRequest('/insectPestSituationGroup/queryList', param);
},
// 查询虫害情况组分页列表 @author jiayu
queryGroupPage: (param) => {
return postRequest('/insectPestSituationGroup/queryPage', param);
},
// 删除虫害情况组 @author jiayu
deleteGroup: (groupId) => {
return getRequest(`/insectPestSituationGroup/delete/${groupId}`);
},
// 查询虫害情况分页列表 @author jiayu
queryPage: (param) => {
return postRequest('/insectPestSituation/queryPage', param);
},
// 删除虫害情况 @author jiayu
delete: (id) => {
return getRequest(`/insectPestSituation/delete/${id}`);
},
// 批量删除虫害情况 @author jiayu
batchDelete: (param) => {
return postRequest('/insectPestSituation/batchDelete', param);
},
// 查询虫害情况列表 @author jiayu
list: (param) => {
return postRequest('/insectPestSituation/queryList', param);
},
// 查询虫害情况详情 @author jiayu
detail: (id) => {
return getRequest(`/insectPestSituation/detail/${id}`);
},
// 新增虫害情况 @author jiayu
add: (param) => {
return postRequest('/insectPestSituation/add', param);
},
// 编辑虫害情况 @author jiayu
update: (param) => {
return postRequest('/insectPestSituation/update', param);
},
// 控制虫害情况 @author jiayu
control: (param) => {
return postRequest('/insectPestSituation/control', param);
},
};

View File

@ -0,0 +1,132 @@
import { postRequest, getRequest, getDownload } from '/@/lib/axios';
export const monitorApi = {
// 新增视频组 @author jiayu
addGroup: (param) => {
return postRequest('/videoGroup/add', param);
},
// 编辑视频组 @author jiayu
updateGroup: (param) => {
return postRequest('/videoGroup/update', param);
},
// 查询视频组分页列表 @author jiayu
queryGroupPage: (param) => {
return postRequest('/videoGroup/queryPage', param);
},
// 删除视频组 @author jiayu
deleteGroup: (groupId) => {
return getRequest(`/videoGroup/delete/${groupId}`);
},
// 批量删除视频组 @author jiayu
batchDeleteGroup: (groupIdList) => {
return postRequest('/videoGroup/batchDelete', groupIdList);
},
// 查询视频组列表 @author jiayu
listGroup: (param) => {
return postRequest('/videoGroup/queryList', param);
},
// 查询设备分页列表 @author jiayu
pageMonitor: (param) => {
return postRequest('/videoItem/queryPage', param);
},
// 获取视频播放地址 @author jiayu
getPlayUrl: (param) => {
return postRequest('/videoItem/getVideoUrl', param);
},
// 获取ysy设备视频地址 @author jiayu
getYsyVideoUrl: (param) => {
return postRequest('/videoItem/getYsyVideoUrl', param);
},
// 查询设备列表 @author jiayu
listMonitor: (param) => {
return postRequest('/videoItem/queryList', param);
},
// 新增设备 @author jiayu
addMonitor: (param) => {
return postRequest('/videoItem/add', param);
},
// 编辑设备 @author jiayu
updateMonitor: (param) => {
return postRequest('/videoItem/update', param);
},
// 删除设备 @author jiayu
deleteMonitor: (id) => {
return getRequest(`/videoItem/delete/${id}`);
},
// 批量删除设备 @author jiayu
batchDeleteMonitor: (param) => {
return postRequest('/videoItem/batchDelete', param);
},
// 查询设备树 @author jiayu
treeMonitor: (param) => {
return postRequest('/videoItem/tree', param);
},
// 获取ysy设备视频地址 @author jiayu
getYsyMonitorUrl: (param) => {
return postRequest('/videoItem/getYsyVideoUrl', param);
},
// 新增视频配置 @author jiayu
addMonitorConfig: (param) => {
return postRequest('/videoConfig/add', param);
},
// 编辑视频配置 @author jiayu
updateMonitorConfig: (param) => {
return postRequest('/videoConfig/update', param);
},
// 查询视频配置分页列表 @author jiayu
queryMonitorConfigPage: (param) => {
return postRequest('/videoConfig/queryPage', param);
},
// 删除视频配置 @author jiayu
deleteMonitorConfig: (param) => {
return postRequest('/videoConfig/delete', param);
},
// 更新视频配置启用状态 @author jiayu
updateEnable: (param) => {
return postRequest('/videoConfig/updateEnable', param);
},
// 查询ai告警记录分页列表 @author jiayu
queryAiAlarmRecordPage: (param) => {
return postRequest('/aiAlarmRecord/queryPage', param);
},
// 新增ai告警记录 @author jiayu
addAiAlarmRecord: (param) => {
return postRequest('/xmgl/aiAlarmRecord/add', param);
},
// 更新ai告警记录 @author jiayu
updateAiAlarmRecord: (param) => {
return postRequest('/aiAlarmRecord/update', param);
},
// 删除ai告警记录 @author jiayu
deleteAiAlarmRecord: (id) => {
return getRequest(`/aiAlarmRecord/delete/${id}`);
},
// 批量删除ai告警记录 @author jiayu
batchDeleteAiAlarmRecord: (param) => {
return postRequest('/aiAlarmRecord/batchDelete', param);
},
};

View File

@ -0,0 +1,33 @@
import { postRequest, getRequest } from '/@/lib/axios';
export const newsApi = {
// 新增新闻 @author jiayu
add: (param) => {
return postRequest('/news/add', param);
},
// 编辑新闻 @author jiayu
update: (param) => {
return postRequest('/news/update', param);
},
// 查询新闻列表 @author jiayu
queryPage: (param) => {
return postRequest('/news/queryPage', param);
},
// 删除新闻 @author jiayu
delete: (newsId) => {
return getRequest(`/news/delete/${newsId}`);
},
// 批量删除新闻 @author jiayu
batchDelete: (newsIdList) => {
return postRequest('/news/batchDelete', newsIdList);
},
// 查询新闻列表 @author jiayu
list: (param) => {
return postRequest('/news/queryList', param);
},
};

View File

@ -0,0 +1,63 @@
import { postRequest, getRequest } from '/@/lib/axios';
export const partyApi = {
// 新增党组织 @author jiayu
addOrg: (param) => {
return postRequest('/partyOrganization/add', param);
},
// 编辑党组织 @author jiayu
updateOrg: (param) => {
return postRequest('/partyOrganization/update', param);
},
// 查询党组织列表 @author jiayu
queryOrgPage: (param) => {
return postRequest('/partyOrganization/queryPage', param);
},
// 删除党组织 @author jiayu
deleteOrg: (orgId) => {
return getRequest(`/partyOrganization/delete/${orgId}`);
},
// 批量删除党组织 @author jiayu
batchDeleteOrg: (orgIdList) => {
return postRequest('/partyOrganization/batchDelete', orgIdList);
},
// 查询党组织列表 @author jiayu
listOrg: (param) => {
return postRequest('/partyOrganization/queryList', param);
},
// 新增党组织活动 @author jiayu
addPartyActivities: (param) => {
return postRequest('/partyActivities/add', param);
},
// 编辑党组织活动 @author jiayu
updatePartyActivities: (param) => {
return postRequest('/partyActivities/update', param);
},
// 查询党组织活动列表 @author jiayu
queryPartyActivitiesPage: (param) => {
return postRequest('/partyActivities/queryPage', param);
},
// 删除党组织活动 @author jiayu
deletePartyActivities: (partyActivitiesId) => {
return getRequest(`/partyActivities/delete/${partyActivitiesId}`);
},
// 批量删除党组织活动 @author jiayu
batchDeletePartyActivities: (partyActivitiesIdList) => {
return postRequest('/partyActivities/batchDelete', partyActivitiesIdList);
},
// 查询党组织活动列表 @author jiayu
listPartyActivities: (param) => {
return postRequest('/partyActivities/queryList', param);
},
};

View File

@ -0,0 +1,88 @@
import { postRequest, getRequest, getDownload } from '/@/lib/axios';
export const weatherStationApi = {
// 新增气象站分组 @author jiayu
addGroup: (param) => {
return postRequest('/environmentGroup/add', param);
},
// 编辑气象站分组 @author jiayu
updateGroup: (param) => {
return postRequest('/environmentGroup/update', param);
},
// 查询气象站分组列表 @author jiayu
listGroup: (param) => {
return postRequest('/environmentGroup/queryList', param);
},
// 查询气象站分组分页列表 @author jiayu
queryGroupPage: (param) => {
return postRequest('/environmentGroup/queryPage', param);
},
// 删除气象站分组 @author jiayu
deleteGroup: (groupId) => {
return getRequest(`/environmentGroup/delete/${groupId}`);
},
// 查询气象站分页列表 @author jiayu
queryPage: (param) => {
return postRequest('/environmentDev/queryPage', param);
},
// 删除气象站 @author jiayu
delete: (id) => {
return getRequest(`/environmentDev/delete/${id}`);
},
// 批量删除气象站 @author jiayu
batchDelete: (param) => {
return postRequest('/environmentDev/batchDelete', param);
},
// 查询气象站列表 @author jiayu
list: (param) => {
return postRequest('/environmentDev/queryList', param);
},
// 新增气象站 @author jiayu
add: (param) => {
return postRequest('/environmentDev/add', param);
},
// 编辑气象站 @author jiayu
update: (param) => {
return postRequest('/environmentDev/update', param);
},
// 查询某个分组下面所有设备的功能 @author jiayu
queryCapacity: (param) => {
return postRequest('/environmentDev/queryCapacity', param);
},
// 查询数据台账分页列表 @author jiayu
queryNoiseDataPage: (param) => {
return postRequest('/dustNoiseData/queryPage', param);
},
// 查询气象站报警预警分页列表 @author jiayu
queryAlarmWarningPage: (param) => {
return postRequest('/environmentAlarm/queryPage', param);
},
// 查询气象站预警设置 @author jiayu
queryWarningByDev: (param) => {
return postRequest('/environmentWarning/queryByDev', param);
},
// 新增气象站报警预警阈值 @author jiayu
addWarning: (param) => {
return postRequest('/environmentWarning/add', param);
},
// 编辑气象站报警预警 @author jiayu
updateWarning: (param) => {
return postRequest('/environmentWarning/update', param);
},
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Frame">
<path id="Vector" d="M21.8343 2.27191C21.525 1.96253 21.0633 1.86878 20.6554 2.03284L2.34372 9.48362C1.92654 9.65237 1.65466 10.0696 1.66638 10.5172C1.6781 10.9672 1.97107 11.368 2.39529 11.5157L9.93513 14.1407L12.5906 21.711C12.7383 22.1352 13.1414 22.4258 13.589 22.4375H13.6148C14.0531 22.4375 14.4562 22.168 14.6226 21.7602L22.0734 3.44847C22.2375 3.043 22.1437 2.58128 21.8343 2.27191ZM13.6875 18.4625L11.7633 12.9758C11.6531 12.6617 11.4093 12.4203 11.0953 12.3102L5.65076 10.4141L19.2047 4.89925L13.6875 18.4625Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -48,7 +48,7 @@ export const addUnit = (value) => {
} else if (isNumber(value)) {
return value + 'px';
}
debugWarn(SCOPE, '属性 value 必须是 string 或 number 类型');
// debugWarn(SCOPE, '属性 value 必须是 string 或 number 类型');
return '';
};

View File

@ -50,6 +50,7 @@
import { SmartLoading } from '/@/components/framework/smart-loading';
import { FILE_FOLDER_TYPE_ENUM } from '/@/constants/support/file-const';
import { smartSentry } from '/@/lib/smart-sentry';
import _ from 'lodash';
const props = defineProps({
value: String,
buttonText: {
@ -95,7 +96,7 @@
});
//
const imgFileType = ['jpg', 'jpeg', 'png', 'gif'];
const imgFileType = ['jpg', 'jpeg', 'png', 'gif', 'svg'];
//
const files = computed(() => {
@ -172,10 +173,10 @@
if (props.accept) {
const suffixIndex = file.name.lastIndexOf('.');
const fileSuffix = file.name.substring(suffixIndex <= -1 ? 0 : suffixIndex).toLowerCase();
// image/*
const acceptTypes = props.accept.split(',').map(type => type.trim().toLowerCase());
const isValidType = acceptTypes.some(type => {
const acceptTypes = props.accept.split(',').map((type) => type.trim().toLowerCase());
const isValidType = acceptTypes.some((type) => {
if (type.includes('/*')) {
// image/*
const mediaType = type.split('/')[0];

View File

@ -197,3 +197,8 @@
},
];
</script>
<style lang="less" scoped>
.smart-query-table-page {
position: static;
}
</style>

View File

@ -21,7 +21,7 @@ export const appDefaultConfig = {
// 顶部菜单页面宽度
pageWidth: '99%',
// 圆角
borderRadius: 6,
borderRadius: 8,
// 标签页
pageTagFlag: true,
// 标签页样式: default、 antd、naive

View File

@ -0,0 +1,42 @@
// 设备类型1 枪机2球机3热成像4单兵5全景6无人机
export const DEVICE_TYPE_ENUM = {
GUN: {
value: 1,
desc: '枪机',
},
SPHERE: {
value: 2,
desc: '球机',
},
THERMAL: {
value: 3,
desc: '热成像',
},
SINGLE_SOLDIER: {
value: 4,
desc: '单兵',
},
PANORAMA: {
value: 5,
desc: '全景',
},
DRONE: {
value: 6,
desc: '无人机',
},
};
export const deviceTypeOptions = Object.values(DEVICE_TYPE_ENUM).map((item) => ({
label: item.desc,
value: item.value,
}));
export const findDeviceLabelByValue = (value) => {
return Object.values(DEVICE_TYPE_ENUM).find((item) => item.value === value)?.desc;
};
export default {
DEVICE_TYPE_ENUM,
deviceTypeOptions,
findDeviceLabelByValue,
};

View File

@ -44,6 +44,15 @@ export const TABLE_ID_CONST = {
FARM: businessERPInitTableId + 10, //农场管理
EVENT: businessERPInitTableId + 11, //事件管理
EVENT_QUESTION: businessERPInitTableId + 12, //事件问题
VIDEO_ITEM: businessERPInitTableId + 13, //视频监控
INSECT_PEST_SITUATION: businessERPInitTableId + 14, //虫害情况
PARTY_ORGANIZATION: businessERPInitTableId + 15, //党组织
PARTY_ACTIVITIES: businessERPInitTableId + 16, //党组织活动
WEATHER_STATION: businessERPInitTableId + 17, // 气象站
WEATHER_STATION_DATA_LEDGER: businessERPInitTableId + 18, // 气象站-数据台账
WEATHER_STATION_THRESHOLD_SETTING: businessERPInitTableId + 19, // 气象站-阈值设置
WEATHER_STATION_ALARM_WARNING: businessERPInitTableId + 20, // 气象站-报警预警
AI_ALARM_RECORD: businessERPInitTableId + 21, // ai告警记录
},
},

View File

@ -17,6 +17,7 @@
import { useUserStore } from '/@/store/modules/system/user';
import { useRouter, useRoute } from 'vue-router';
import { message } from 'ant-design-vue';
import { MENU_TYPE_ENUM } from '/@/constants/system/menu-const';
const router = useRouter();
const route = useRoute();
@ -29,12 +30,16 @@
const moduleMenuList = computed(() => {
const list = useUserStore().getModuleMenuList;
//
let currentModule = null;
//
let menu = useUserStore().findRouteByMenuId(route.name);
//
let currentModule = list.find(item => item.menuId === menu.moduleId);
currentModule = menu ? list.find((item) => item.menuId === menu.moduleId) : list[0];
console.log('currentModule', currentModule);
//
let currentModuleList = list.filter(item => item.platformType === currentModule.platformType);
let currentModuleList = list.filter((item) => item.platformType === currentModule.platformType);
return [
{
menuId: 'homePage',
@ -55,7 +60,8 @@
} else {
let menuTree = useUserStore().getCurrentModuleMenuTree;
if (menuTree && menuTree.length > 0) {
router.push(menuTree[0].path);
let firstMenu = findFirstMenu(menuTree);
router.push(firstMenu.path);
} else {
if (item.frameFlag) {
window.open(item.frameUrl);
@ -66,6 +72,14 @@
}
};
const findFirstMenu = (menuTree) => {
if (menuTree[0].menuType === MENU_TYPE_ENUM.CATALOG.value) {
return findFirstMenu(menuTree[0].children);
} else {
return menuTree[0];
}
};
watch(
() => useUserStore().currentVillageId,
(val) => {
@ -91,6 +105,7 @@
:deep(.ant-menu-light) {
background-color: transparent;
color: #fff;
justify-content: flex-end;
.ant-menu-item-selected {
color: #20b066;
background-color: #fff;

View File

@ -99,8 +99,11 @@
}
.title {
font-size: 16px;
font-weight: 600;
font-size: 20px;
// font-weight: 600;
margin-left: 8px;
font-family: PingFang SC, PingFang SC;
font-weight: bold;
overflow: hidden;
word-wrap: break-word;
white-space: nowrap;

View File

@ -119,9 +119,11 @@
}
.title {
font-size: 16px;
font-weight: 600;
font-size: 20px;
// font-weight: 600;
margin-left: 8px;
font-family: PingFang SC, PingFang SC;
font-weight: bold;
}
.title-light {
// color: #001529;

View File

@ -126,9 +126,11 @@
vertical-align: middle;
}
.title {
font-size: 16px;
font-weight: 600;
font-size: 20px;
// font-weight: 600;
margin-left: 8px;
font-family: PingFang SC, PingFang SC;
font-weight: bold;
}
.title-light {
color: #001529;

View File

@ -51,6 +51,9 @@
:theme="sideMenuTheme"
v-show="!fullScreenFlag"
>
<div class="module-title" v-if="moduleName">
{{ moduleName }}
</div>
<a-scrollbar>
<!-- 左侧菜单 -->
<SideMenu :collapsed="collapsed" />
@ -158,6 +161,7 @@
}
return due;
});
const moduleName = computed(() => useUserStore().getModuleName);
//
const collapsed = ref(false);
@ -219,6 +223,19 @@
height: auto;
}
.module-title {
height: 50px;
line-height: 50px;
background-color: #20b066;
color: #ffffff;
font-size: 16px;
font-weight: bold;
padding-left: 10px;
text-align: center;
// border-radius: 16px 16px 0 0;
border-radius: v-bind(borderRadius) v-bind(borderRadius) 0 0;
}
.layout-header {
background: #fff;
padding: 0;
@ -382,9 +399,11 @@
}
.title {
font-size: 16px;
font-weight: 600;
font-size: 20px;
// font-weight: 600;
margin-left: 8px;
font-family: PingFang SC, PingFang SC;
font-weight: bold;
}
.title-light {
// color: #001529;

View File

@ -34,6 +34,8 @@ import LocalStorageKeyConst from '/@/constants/local-storage-key-const.js';
import '/@/components/scrollbar/css/scrollbar.css';
import AScrollbar from '/@/components/scrollbar';
import 'video.js/dist/video-js.css';
/*
* -------------------- 着重 解释说明下main.js的初始化逻辑 begin --------------------
*

View File

@ -0,0 +1,11 @@
export const bigdataRouters = [
{
path: '/bigdata',
name: 'BigData',
component: () => import('/@/views/business/bigdata/index.vue'),
meta: {
title: '大数据',
hideInMenu: true,
},
},
];

View File

@ -8,6 +8,7 @@
* @Copyright 1024创新实验室 https://1024lab.net Since 2012
*/
import { homeRouters } from './system/home';
import { bigdataRouters } from './business/bigdata';
import { loginRouters } from './system/login';
import { homePageRouters } from './system/homepage';
import { helpDocRouters } from './support/help-doc';
@ -18,6 +19,7 @@ export const routerArray = [
...loginRouters,
...homeRouters,
...homePageRouters,
...bigdataRouters,
...helpDocRouters,
{ path: '/:pathMatch(.*)*', name: '404', component: NotFound },
{ path: '/403', name: '403', component: NoPrivilege }

View File

@ -108,6 +108,9 @@ export const useUserStore = defineStore({
getCurrentVillageName(state) {
return state.villageList.find((e) => e.id == localRead(localKey.CURRENT_VILLAGE))?.name;
},
getCurrentVillage(state) {
return state.villageList.find((e) => e.id == localRead(localKey.CURRENT_VILLAGE));
},
getNeedUpdatePwdFlag(state) {
return state.needUpdatePwdFlag;
},
@ -128,13 +131,22 @@ export const useUserStore = defineStore({
}
let menuList = state.allMenuList.filter((e) => e.moduleId == state.moduleCurrentId);
let result = buildMenuTree(menuList);
console.log(result, 'result', menuList);
let menuIdList = [];
findMenuIdList(result, menuIdList);
// 重复出现2次的
let repeatIds = menuIdList.filter((e) => menuIdList.filter((f) => f === e).length >= 2);
// 删除重复的menu
result = result.filter((e) => !repeatIds.includes(e.menuId));
return result;
},
// 获取模块当前模块ID
getModuleCurrentId(state) {
return state.moduleCurrentId;
},
getModuleName(state) {
return state.moduleCurrentId ? state.allMenuList.find((e) => e.menuId == state.moduleCurrentId)?.menuName : '';
},
//菜单树
getMenuTree(state) {
return state.menuTree;
@ -451,3 +463,13 @@ function buildMenuChildren(menu, allMenuList) {
buildMenuChildren(item, allMenuList);
}
}
// 过滤与children相同的menu
function findMenuIdList(menuTree, arr) {
menuTree.forEach((menu) => {
arr.push(menu.menuId);
if (menu.children) {
findMenuIdList(menu.children, arr);
}
});
}

12
src/theme/font.css Normal file
View File

@ -0,0 +1,12 @@
@font-face {
font-family: AliHYAiHei;
font-weight: normal;
src: url("/fonts/AliHYAiHei.ttf");
}
@font-face {
font-family: Alibaba PuHuiTi;
font-weight: normal;
src: url("/fonts/AlibabaPuHuiTi.ttf");
}

Some files were not shown because too many files have changed in this diff Show More