大屏、智慧物联
@ -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'
|
||||
@ -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'
|
||||
@ -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>
|
||||
|
||||
@ -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
BIN
public/fonts/AliHYAiHei.ttf
Normal file
BIN
public/fonts/AlibabaPuHuiTi.ttf
Normal file
74
public/lib/jquery-1.12.4.min.js
vendored
Normal file
1
public/lib/jsWebControl-1.0.0.min.js
vendored
Normal file
1
public/lib/jsencrypt.min.js
vendored
Normal file
36
src/api/business/bigdata/bigdata-api.js
Normal 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'),
|
||||
};
|
||||
@ -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);
|
||||
},
|
||||
};
|
||||
132
src/api/business/monitor/monitor-api.js
Normal 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);
|
||||
},
|
||||
};
|
||||
33
src/api/business/news/news-api.js
Normal 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);
|
||||
},
|
||||
};
|
||||
63
src/api/business/party/party-api.js
Normal 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);
|
||||
},
|
||||
};
|
||||
88
src/api/business/weather-station/weather-station-api.js
Normal 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);
|
||||
},
|
||||
|
||||
};
|
||||
BIN
src/assets/images/bigdata/alarm-bg.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
src/assets/images/bigdata/bigdata-dialog-bg.png
Normal file
|
After Width: | Height: | Size: 593 KiB |
BIN
src/assets/images/bigdata/bigdata-dialog-close.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/images/bigdata/card-edit-ic.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/images/bigdata/card-header-bg.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/bigdata/d-metric-bg-active.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/images/bigdata/d-metric-bg.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/assets/images/bigdata/default-map-icon.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
5
src/assets/images/bigdata/default-metric.svg
Normal 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 |
BIN
src/assets/images/bigdata/farm-active.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
src/assets/images/bigdata/farm.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/images/bigdata/forestry-active.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
src/assets/images/bigdata/forestry.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
src/assets/images/bigdata/header-bg.png
Normal file
|
After Width: | Height: | Size: 314 KiB |
BIN
src/assets/images/bigdata/header-logout-bg.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
src/assets/images/bigdata/header-title-ic.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
src/assets/images/bigdata/home-active.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
src/assets/images/bigdata/home.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
src/assets/images/bigdata/insect-light-active.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
src/assets/images/bigdata/insect-light.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
src/assets/images/bigdata/insectLight-map-icon.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
src/assets/images/bigdata/land-active.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
src/assets/images/bigdata/land.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
src/assets/images/bigdata/monitor-active.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
src/assets/images/bigdata/monitor-map-icon.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
src/assets/images/bigdata/monitor-popup-bg.png
Normal file
|
After Width: | Height: | Size: 373 KiB |
BIN
src/assets/images/bigdata/monitor-popup-close.png
Normal file
|
After Width: | Height: | Size: 392 B |
BIN
src/assets/images/bigdata/monitor.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
src/assets/images/bigdata/news-title-bg.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
src/assets/images/bigdata/party-member-bg.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
src/assets/images/bigdata/party-member-ic.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
src/assets/images/bigdata/river-course-active.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/images/bigdata/river-course.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/images/bigdata/tab-bg-active.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/bigdata/tab-bg.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/images/bigdata/village-info-ic.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/images/bigdata/village-material.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/assets/images/bigdata/village-phone-bg.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
src/assets/images/bigdata/village-phone.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
src/assets/images/bigdata/village-resource-1.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
src/assets/images/bigdata/village-resource-2.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
src/assets/images/bigdata/village-resource-3.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
src/assets/images/bigdata/village-resource-4.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
src/assets/images/bigdata/village-resource-5.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
src/assets/images/bigdata/village-resource-6.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
src/assets/images/bigdata/weather-station-active.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
src/assets/images/bigdata/weather-station.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
src/assets/images/bigdata/weatherStation-map-icon.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
src/assets/images/bigdata/weatherStationAlarm-map-icon.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
src/assets/images/bigdata/week-bg-active.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src/assets/images/bigdata/week-bg.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
src/assets/images/monitor/video_1.png
Normal file
|
After Width: | Height: | Size: 276 B |
BIN
src/assets/images/monitor/video_1_active.png
Normal file
|
After Width: | Height: | Size: 258 B |
BIN
src/assets/images/monitor/video_2.png
Normal file
|
After Width: | Height: | Size: 224 B |
BIN
src/assets/images/monitor/video_2_active.png
Normal file
|
After Width: | Height: | Size: 217 B |
BIN
src/assets/images/monitor/video_3.png
Normal file
|
After Width: | Height: | Size: 227 B |
BIN
src/assets/images/monitor/video_3_active.png
Normal file
|
After Width: | Height: | Size: 219 B |
BIN
src/assets/images/monitor/video_4.png
Normal file
|
After Width: | Height: | Size: 261 B |
BIN
src/assets/images/monitor/video_4_active.png
Normal file
|
After Width: | Height: | Size: 252 B |
BIN
src/assets/images/weather/bingbao.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/assets/images/weather/lei.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/assets/images/weather/qing.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/images/weather/shachen.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/images/weather/wu.png
Normal file
|
After Width: | Height: | Size: 978 B |
BIN
src/assets/images/weather/xue.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
src/assets/images/weather/yin.png
Normal file
|
After Width: | Height: | Size: 985 B |
BIN
src/assets/images/weather/yu.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/images/weather/yun.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@ -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 '';
|
||||
};
|
||||
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -197,3 +197,8 @@
|
||||
},
|
||||
];
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.smart-query-table-page {
|
||||
position: static;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -21,7 +21,7 @@ export const appDefaultConfig = {
|
||||
// 顶部菜单页面宽度
|
||||
pageWidth: '99%',
|
||||
// 圆角
|
||||
borderRadius: 6,
|
||||
borderRadius: 8,
|
||||
// 标签页
|
||||
pageTagFlag: true,
|
||||
// 标签页样式: default、 antd、naive
|
||||
|
||||
42
src/constants/business/monitor/monitor-const.js
Normal 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,
|
||||
};
|
||||
@ -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告警记录
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 ※ --------------------
|
||||
*
|
||||
|
||||
11
src/router/business/bigdata.js
Normal file
@ -0,0 +1,11 @@
|
||||
export const bigdataRouters = [
|
||||
{
|
||||
path: '/bigdata',
|
||||
name: 'BigData',
|
||||
component: () => import('/@/views/business/bigdata/index.vue'),
|
||||
meta: {
|
||||
title: '大数据',
|
||||
hideInMenu: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
@ -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 }
|
||||
|
||||
@ -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
@ -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");
|
||||
}
|
||||
|
||||