master
zhy521521 9 months ago
parent b6616dc3ed
commit f188df00a6

@ -0,0 +1,2 @@
# VUE_APP_PATH_PRE='http://192.168.0.188:8118'
VUE_APP_PATH_PRE='http://121.41.91.94:12002'

10
package-lock.json generated

@ -8940,6 +8940,16 @@
"postcss-value-parser": "^3.0.0"
}
},
"postcss-px-to-viewport": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/postcss-px-to-viewport/-/postcss-px-to-viewport-1.1.1.tgz",
"integrity": "sha512-2x9oGnBms+e0cYtBJOZdlwrFg/mLR4P1g2IFu7jYKvnqnH/HLhoKyareW2Q/x4sg0BgklHlP1qeWo2oCyPm8FQ==",
"dev": true,
"requires": {
"object-assign": ">=4.0.1",
"postcss": ">=5.0.2"
}
},
"postcss-px2rem": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/postcss-px2rem/-/postcss-px2rem-0.3.0.tgz",

@ -40,6 +40,7 @@
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"postcss-px-to-viewport": "^1.1.1",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

@ -7,7 +7,12 @@
<style lang="less">
* {
box-sizing: border-box;
user-select: none;
// user-select: none;
}
//
* {
scrollbar-color: rgb(13, 43, 85) transparent;
/* 设置滑块颜色及背景色 */
}
#app {
@ -46,5 +51,4 @@
@font-face {
font-family: AlimamaShuHeiTi;
src: url('./fonts/AlimamaShuHeiTi.ttf')
}
</style>
}</style>

@ -1,18 +0,0 @@
// 应用超市 ---> 警情通报
import request from '@/utils/request'
// 警情通报主页查询
export function get_counterfraud_data(params) {
return request({
url: '/safety/store/instantalarm/safeCompanyNewsInfo',
method: 'get',
params
})
}
export function get_counter_item(id) {
return request({
url: '/safety/store/instantalarm/safeCompanyNewsInfo/' + id,
method: 'get',
id
})
}

@ -1,26 +0,0 @@
// 应用超市 ---> 人员背景审查
import request from '@/utils/request'
// 人员背景审查主页查询
export function get_personback_data(params) {
return request({
url: '/safety/store/personnelReview/tbCompanyUserExamination/list',
method: 'post',
params
})
}
// 人员背景审查子页查询
export function get_personback_item_data(params) {
return request({
url: '/safety/store/personnelReview/tbCompanyUserList/list',
method: 'post',
params
})
}
// 人员背景审查子页个人详情查询
export function get_personback_item_data_person(params) {
return request({
url: '/safety/store/personnelReview/tbCompanyUserCase/list',
method: 'post',
params
})
}

@ -1,18 +0,0 @@
// 应用超市 ---> 警情通报
import request from '@/utils/request'
// 警情通报主页查询
export function get_report_data(params) {
return request({
url: '/safety/store/instantalarm/safeCompanyNewsInfo',
method: 'get',
params
})
}
export function get_report_item(id) {
return request({
url: '/safety/store/instantalarm/safeCompanyNewsInfo/' + id,
method: 'get',
id
})
}

@ -1,133 +0,0 @@
import request from '@/utils/request'
//基本信息
export function baseInfo(params) {
return request({
url: '/safety/enterpriseArchives/baseInfo',
method: 'get',
params
})
}
//企业平安指数
export function safeIndex(params) {
return request({
url: '/safety/enterpriseArchives/safeIndex',
method: 'get',
params
})
}
//企业平安指数
export function realTimeMonitoring(params) {
return request({
url: '/safety/enterpriseArchives/realTimeMonitoring',
method: 'get',
params
})
}
//实时人脸卡口流量
export function realTimePassageFlowFace(params) {
return request({
url: '/safety/enterpriseArchives/realTimePassageFlow/face',
method: 'get',
params
})
}
//实时车辆卡口流量
export function realTimePassageFlowVehicle(params) {
return request({
url: '/safety/enterpriseArchives/realTimePassageFlow/vehicle',
method: 'get',
params
})
}
//预警处置
export function warningDisposal(params) {
return request({
url: '/safety/enterpriseArchives/warningDisposal',
method: 'get',
params
})
}
//各类企业员工数量
export function tbSafeCompanyStaffCount(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyStaff/count',
method: 'get',
params
})
}
//企业员工
export function tbSafeCompanyStaff(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyStaff',
method: 'get',
params
})
}
//各类流动人员数量
export function tbSafeCompanyFlowCount(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyFlow/count',
method: 'get',
params
})
}
//访客
export function tbSafeCompanyVisit(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyVisit',
method: 'get',
params
})
}
//流动人员
export function tbSafeCompanyFlow(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyFlow',
method: 'get',
params
})
}
//车辆
export function tbSafeCompanyVehicle(params) {
return request({
url: '/safety/enterpriseArchives/tbSafeCompanyVehicle',
method: 'get',
params
})
}
//各个物品总数
export function TbSafeCompanyGoodsCount(params) {
return request({
url: '/safety/enterpriseArchives/TbSafeCompanyGoods/count',
method: 'get',
params
})
}
//物品
export function TbSafeCompanyGoods(params) {
return request({
url: '/safety/enterpriseArchives/TbSafeCompanyGoods',
method: 'get',
params
})
}
//物品详情
export function TbSafeCompanyGoodsDetail(params) {
return request({
url: '/safety/enterpriseArchives/TbSafeCompanyGoods/detail',
method: 'get',
params
})
}
//案件列表
export function TbSafeCompanyCase(params) {
return request({
url: '/safety/enterpriseArchives/TbSafeCompanyCase',
method: 'get',
params
})
}

@ -1,58 +0,0 @@
// 闭环处置
import request from '@/utils/request'
// 我的流程查询
export function get_my_course(data) {
return request({
url: '/workflow/external/ownList',
method: 'post',
data
})
}
// 我的流程流转记录查询
export function get_my_course_record(data) {
return request({
url: '/workflow/external/workDetail',
method: 'post',
data
})
}
// 待办任务查询
export function get_backlog(data) {
return request({
url: '/workflow/external/todoList',
method: 'post',
data
})
}
// 待办任务公司树查询
export function get_backlog_company_tree(params) {
return request({
url: '/closedloopdisposal/workflow/dept/list',
method: 'get',
params
})
}
// 审批流程
export function get_backlog_approve(data) {
return request({
url: '/closedloopdisposal/workflow/updateFlowableStatus',
method: 'post',
data
})
}
// 已办任务查询
export function get_complete(data) {
return request({
url: '/workflow/external/finishedList',
method: 'post',
data
})
}
// 抄送我的查询
export function get_copy(data) {
return request({
url: '/workflow/external/copyList',
method: 'post',
data
})
}

@ -1,185 +0,0 @@
import request from '@/utils/request'
//企业基本信息
export function companyBaseInfo(params) {
return request({
url: '/safety/enterpriseArchives/baseInfo',
method: 'get',
params
})
}
//企业指数
export function signboardIndexSort(params) {
return request({
url: '/safety/signboard/indexSort',
method: 'post',
params
})
}
//企业一级级二级分数
export function signboardIndexScore(params) {
return request({
url: '/safety/signboard/indexScore',
method: 'post',
params
})
}
//内部治安
export function internalSafety(params) {
return request({
url: '/safety/signboard/internal/safety',
method: 'post',
params
})
}
//内部治安详情
export function internalSafetyDetail(params) {
return request({
url: '/safety/signboard/internal/safety/detail',
method: 'post',
params
})
}
//中高风险返企数
export function epidemicTrend(params) {
return request({
url: '/safety/signboard/epidemic/trend',
method: 'post',
params
})
}
//疫苗接种数
export function epidemicInoculations(params) {
return request({
url: '/safety/signboard/epidemic/inoculations',
method: 'post',
params
})
}
//核酸检测率
export function epidemicNucleicAcid(params) {
return request({
url: '/safety/signboard/epidemic/nucleicAcid',
method: 'post',
params
})
}
//场所码异常数
export function epidemicSiteCode(params) {
return request({
url: '/safety/signboard/epidemic/siteCode',
method: 'post',
params
})
}
//二级指标分类统计上报数据量之和
export function personSafety(params) {
return request({
url: '/safety/signboard/person/safety',
method: 'post',
params
})
}
//人员安全详情
export function personSafetyDetail(params) {
return request({
url: '/safety/signboard/person/safety/detail',
method: 'post',
params
})
}
//危化品运输
export function chemicals(params) {
return request({
url: '/safety/signboard/hazardous/chemicals',
method: 'post',
params
})
}
//危化品运输
export function chemicalsDetail(params) {
return request({
url: '/safety/signboard/hazardous/chemicals/detail',
method: 'post',
params
})
}
//安全物品上报
export function fireSafety(params) {
return request({
url: '/safety/signboard/fire/safety',
method: 'post',
params
})
}
//安全物品上报详情
export function fireSafetyDetail(params) {
return request({
url: '/safety/signboard/fire/safety/detail',
method: 'post',
params
})
}
//列管物品安全
export function tubeSafety(params) {
return request({
url: '/safety/signboard/tube/safety',
method: 'post',
params
})
}
//列管物品安全上报数据详情
export function tubeSafetyDetail(params) {
return request({
url: '/safety/signboard/tube/safety/detail',
method: 'post',
params
})
}
//道路安全
export function roadSafety(params) {
return request({
url: '/safety/signboard/road/safety',
method: 'post',
params
})
}
//道路安全详情
export function roadSafetyDetail(params) {
return request({
url: '/safety/signboard/road/safety/detail',
method: 'post',
params
})
}
//防攻击安全
export function preventSafety(params) {
return request({
url: '/safety/signboard/prevent/safety',
method: 'post',
params
})
}
//防攻击安全详情
export function preventSafetyDetail(params) {
return request({
url: '/safety/signboard/prevent/safety/detail',
method: 'post',
params
})
}
//网络安全
export function networkSafety(params) {
return request({
url: '/safety/signboard/network/safety',
method: 'post',
params
})
}
//网络安全详情
export function networkSafetyDetail(params) {
return request({
url: '/safety/signboard/network/safety/detail',
method: 'post',
params
})
}

@ -1,123 +0,0 @@
// 系统管理模块接口
import request from '@/utils/request'
import { getToken } from '@/utils/auth'
// 字典表查询
export function commonDict(params) {
return request({
url: '/common/dict/list',
method: 'get',
params
})
}
// 企业名称树形数据
export function getAllData(params) {
return request({
url: 'safety/tbAreacodeInfo/listAndVideo',
method: 'post',
params
})
}
// 右侧视频监控设备查询List
export function getVideoList(params) {
return request({
url: '/safety/tbDeviceVideoInfo/list',
method: 'post',
params
})
}
// 右侧智能感知设备查询List
export function getPerceptionList(params) {
return request({
url: '/safety/tbDevicePerceptionInfo/list',
method: 'post',
params
})
}
// 厂家查询
export function getCompanyList(params) {
return request({
url: 'safety/system/enterpriseList',
method: 'get',
params
})
}
// 新增视频监控
export function addVideoList(params) {
return request({
url: '/safety/tbDeviceVideoInfo/insert',
method: 'get',
params
})
}
// 修改视频监控
export function changeVideoList(params) {
return request({
url: '/safety/tbDeviceVideoInfo/update',
method: 'post',
params
})
}
// 删除视频监控
export function deleteVideo(params) {
return request({
url: '/safety/tbDeviceVideoInfo?' + params,
method: 'delete',
})
}
// 导入视频监控
export function importVideoList(params) {
return request({
url: '/safety/tbDeviceVideoInfo/importData',
method: 'post',
params
})
}
// 下载视频监控模板
export function importTemplateVideo(params) {
return request({
url: '/safety/tbDeviceVideoInfo/importTemplate',
method: 'post',
params,
responseType: 'blob',
headers: { 'Access-Control-Allow-origin': '*', 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + getToken() }
})
}
// 新增智能感应
export function addPerceptionList(params) {
return request({
url: '/safety/tbDevicePerceptionInfo/insert',
method: 'post',
params
})
}
// 修改智能感应
export function changePerceptionList(params) {
return request({
url: '/safety/tbDevicePerceptionInfo/update',
method: 'post',
params
})
}
// 删除智能感应
export function deletePerception(params) {
return request({
url: '/safety/tbDevicePerceptionInfo?' + params,
method: 'delete',
})
}
// 导出视频监控
export function exportVideo(params) {
return request({
url: '/safety/tbDeviceVideoInfo/export',
method: 'post',
params
})
}
// 导出智能感应
export function exportPerception(params) {
return request({
url: '/safety/tbDevicePerceptionInfo/export',
method: 'post',
params
})
}

@ -0,0 +1,66 @@
import request from "@/utils/request";
//电商平台销售数据
export function salesData(params) {
return request({
url: "/product/introduction/salesData",
method: "post",
params,
});
}
//电商平台销售数据按月份统计
export function salesDataByMonth(params) {
return request({
url: "/product/introduction/salesDataByMonth",
method: "post",
params,
});
}
//新闻报道
export function newsReporting(params) {
return request({
url: "/product/introduction/newsReporting",
method: "post",
params,
});
}
// 企业销售数据
export function enterpriseSalesData(params) {
return request({
url: "/product/introduction/enterpriseSalesData",
method: "post",
params,
});
}
// 企业类型统计
export function enterpriseTypeStatistics(params) {
return request({
url: "/product/introduction/enterpriseTypeStatistics",
method: "post",
params,
});
}
// 龙头企业
export function regionalBrand(params) {
return request({
url: "/product/introduction/regionalBrand",
method: "post",
params,
});
}
// 产品专家
export function industryExperts(params) {
return request({
url: "/product/introduction/industryExperts",
method: "post",
params,
});
}
// 地图数据
export function administrativeUnit(params) {
return request({
url: "/product/introduction/administrativeUnit",
method: "post",
params,
});
}

@ -0,0 +1,59 @@
import request from "@/utils/request";
//产业规划基本资源
export function industrialPlanBasicResources(params) {
return request({
url: "/base/homePage/industrialPlanBasicResources",
method: "post",
params,
});
}
// 产业规划富硒产业
export function industrialPlanSeleniumRichIndustry(params) {
return request({
url: "/base/homePage/industrialPlanSeleniumRichIndustry",
method: "post",
params,
});
}
// 查询产业规划示范项目信息库
export function industrialPlanDemonstrationProject(params) {
return request({
url: "base/homePage/industrialPlanDemonstrationProject",
method: "post",
params,
});
}
// 产业规划市场主体
export function industrialPlanMarketSubject(params) {
return request({
url: "base/homePage/industrialPlanMarketSubject",
method: "post",
params,
});
}
// 产业规划富硒产业产值
export function industrialPlanIndustrialOutputValue(params) {
return request({
url: "base/homePage/industrialPlanIndustrialOutputValue",
method: "post",
params,
});
}
// 产业规划年综合产值变化曲线
export function industrialPlanComprehensiveCurve(params) {
return request({
url: "base/homePage/industrialPlanComprehensiveCurve",
method: "post",
params,
});
}
// 产业规划年综合产值变化曲线
export function industrialPlanPolicy(params) {
return request({
url: "base/homePage/industrialPlanPolicy",
method: "post",
params,
});
}

@ -1,14 +0,0 @@
import axios from 'axios'
import { getToken } from '@/utils/auth'
//通用下载接口
export function download(params) {
return axios({
url: `http://${window.location.host}/hjapi/common/download`,
//url: 'http://218.92.196.102:8888/zhapi/common/download',
//url: 'http://192.168.0.188:8118/hjapi/common/download',
method: 'get',
params,
responseType: 'blob',
headers: { 'Access-Control-Allow-origin': '*', 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + getToken() }
})
}

@ -1,32 +0,0 @@
import request from '@/utils/request'
//首页数据统计
export function listTotal(params) {
return request({
url: '/safety/enterprise-archives/search-engine-homepage/data',
method: 'get',
params
})
}
//历史搜索列表
export function historyList(params) {
return request({
url: '/safety/enterprise-archives/search-engine-homepage/history',
method: 'get',
params
})
}
//搜索
export function searchList(params) {
return request({
url: '/safety/enterprise-archives/search-engine-homepage/search',
method: 'get',
params
})
}
//卡片列表
export function cardLists() {
return request({
url: '/safety/enterprise-archives/search-engine-homepage/company-history',
method: 'get'
})
}

@ -1,9 +0,0 @@
import request from '@/utils/request'
//首页数据统计
export function getSafeCompanyStatisticsScore(params) {
return request({
url: '/safety/index/company/statistics/detail',
method: 'post',
params
})
}

@ -1,57 +0,0 @@
import request from '@/utils/request'
//查询企业数据
export function queryCompany(params) {
return request({
url: '/element/resource/queryCompany',
method: 'get',
params
})
}
//查询监控数据
export function queryVideo(params) {
return request({
url: '/element/resource/queryVideo',
method: 'get',
params
})
}
//根据企业id查询企业信息
export function selectCompanyInfoById(params) {
return request({
url: '/element/resource/selectCompanyInfoById',
method: 'get',
params
})
}
//图层数据
export function statistic(params) {
return request({
url: '/element/resource/statistic',
method: 'get',
params
})
}
// 车辆点位数据
export function car_point(params) {
return request({
url:'/SafeCompanyVehicleTrack/list',
method:'get',
params
})
}
// 车辆轨迹
export function car_line(params) {
return request({
url:'/SafeCompanyVehicleTrack/getById',
method:'get',
params
})
}
// 感知设备
export function camera_point(params) {
return request({
url:'/ThreeProoFingsData/CameraList',
method:'get',
params
})
}

@ -0,0 +1,9 @@
import request from "@/utils/request";
//获取首页元素信息
export function getBaseInfo(params) {
return request({
url: "/base/homePage/getBaseInfo",
method: "post",
params,
});
}

@ -1,99 +0,0 @@
import request from '@/utils/request'
const API = {
//获取设备列表
getinfoList: function (params) {
return request({
url: '/video/control/getVideoList',
method: 'post',
params
})
},
// getToken:function(){
// return axios({
// url:'http://192.168.0.45:20000/api/v1/login?username=admin&password=af7548eedff8e737c0e4b2a669497290&url_token_only=true',
// method:'post'
// })
//},
//实时直播
liveStart: function (params) {
return request({
url: '/video/control/stream/start',
method: 'post',
params
})
},
//结束直播
liveStop: function (params) {
return request({
url: '/video/control/stream/stop',
method: 'post',
params
})
},
//云台控制
cloudControl: function (params) {
return request({
url: '/video/control/getCloudControl',
method: 'post',
params
})
},
//焦点光圈
fiControl: function (params) {
return request({
url: '/video/control/getFiControl',
method: 'post',
params
})
},
//语音喊话
getTalk: function (params) {
return request({
url: '/video/control/getTalk',
method: 'post',
params
})
},
//开始回放
playbackStart: function (params) {
return request({
url: '/video/control/playback/start',
method: 'post',
params
})
},
//结束回放
playbackStop: function (params) {
return request({
url: '/video/control/playback/stop',
method: 'post',
params
})
},
//回放控制
playbackControl: function (params) {
return request({
url: '/video/control/playback/control',
method: 'post',
params
})
},
//更新监控设备状态
deviceChannellist: function (params) {
return request({
url: '/video/control/device/channellist',
method: 'post',
params
})
},
//获取字典表
getDictList: function (params) {
return request({
url: '/gatherCommon/dict/list',
method: 'get',
params
})
}
}
export default API

@ -1,17 +0,0 @@
import request from '@/utils/request'
//基本信息
export function topMap(params) {
return request({
url: '/safety/index/company/top/map',
method: 'post',
params
})
}
//单个企业信息
export function topMapOne(params) {
return request({
url: '/safety/index/company/top/map/one',
method: 'post',
params
})
}

@ -1,33 +0,0 @@
import request from '@/utils/request'
//预警信息列表
export function mapList(params) {
return request({
url: '/safety/system/tbSafeCompanyAlarm/map/list',
method: 'post',
params
})
}
//部门信息列表
export function deptList(params) {
return request({
url: '/system/dept/list',
method: 'get',
params
})
}
//处置请求
export function addCommonApprovalProcess(data) {
return request({
url: '/closedloopdisposal/workflow/addCommonApprovalProcess',
method: 'post',
data
})
}
// 地图上图点位公司
export function get_company_list(params) {
return request({
url: '/safety/system/tbSafeCompanyAlarm/map/companyInfoList',
method: 'get',
params
})
}

@ -0,0 +1,50 @@
import request from "@/utils/request";
//产业规划基本资源
export function consumables(params) {
return request({
url: "/production/management/consumables",
method: "post",
params,
});
}
//农业基地面积
export function agriculturalBaseArea(params) {
return request({
url: "/production/management/agriculturalBaseArea",
method: "post",
params,
});
}
//产品产量
export function productOutput(params) {
return request({
url: "/production/management/productOutput",
method: "post",
params,
});
}
// 资源分布
export function resourceDistribution(params) {
return request({
url: "/production/management/resourceDistribution",
method: "post",
params,
});
}
// 物联网设备
export function IoTDevices(params) {
return request({
url: "/production/management/IoTDevices",
method: "post",
params,
});
}
// 农事建议
export function agriculturalAdvice(params) {
return request({
url: "/production/management/agriculturalAdvice",
method: "post",
params,
});
}

@ -0,0 +1,11 @@
import request from "@/utils/request";
// 理论基础-全球功能农业领域发文研究分支分布
export function researchBranchDistributionBase(params) {
return request({
url: "/standard/resourceOverview/researchBranchDistributionBase",
method: "post",
params,
});
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -13,7 +13,7 @@
<style lang="less" scoped>
.titleCard {
width: 100%;
height: 40px;
height: 3.704vh;
background-image: url('../../../public/images/bg_title.png');
background-size: 100% 100%;
font-size: 18px;

@ -10,8 +10,15 @@
{{ routerInfo.title }}
</div>
<div class="right">
<div class="user">
{{ userInfo.userName || '' }}
<div class="toolip" @click="loginOut">
退出
</div>
</div>
<div class="return" v-if="routerInfo.name != 'home'">
<img src="../../../public/images/go-back.png" alt="" style="width: 100%;height: 100%;" @click="$router.push({name:'home'})">
<img src="../../../public/images/go-back.png" alt="" style="width: 100%;height: 100%;"
@click="$router.push({ name: 'home' })">
</div>
</div>
</div>
@ -29,6 +36,7 @@ export default {
date: icnow.getDate(),
day: days[icnow.getDay() - 1],
time: icnow.toTimeString().substring(0, 8),
userInfo: {}
}
},
computed: {
@ -50,8 +58,7 @@ export default {
}
},
created() {
debugger
console.log(9999, this.$route.query)
interval = setInterval(() => {
let icnow = new Date();
this.year = icnow.getFullYear();
@ -60,22 +67,37 @@ export default {
this.day = days[icnow.getDay()];
this.time = icnow.toTimeString().substring(0, 8);
}, 1000);
console.log('userInfo', this.userInfo)
this.getUser()
},
beforeDestroy() {
clearInterval(interval);
},
methods: {
async getUser() {
await this.$store.dispatch("GetInfo")
this.userInfo = JSON.parse(localStorage.getItem('user'))
},
loginOut() {
this.$store.dispatch("FedLogOut")
this.$router.push({ name: 'login' })
},
}
}
</script>
<style lang="less" scoped>
.menu-wrap {
box-sizing: border-box;
width: 100%;
height: 85px;
background-image: url('../../../public/images/menu-top-bg.png');
background-image: url('../../../public/images/header.png');
background-size: 100%;
z-index: 10086;
position: relative;
// left: 0;
// top: 0;
// z-index: 10086;
.content {
height: 100%;
display: flex;
@ -93,8 +115,7 @@ export default {
justify-content: space-around;
line-height: 20px;
font-weight: bold;
font-family: D-DIN,
D-DIN;
font-family: D-DIN;
font-size: 20px;
color: #BFDAF1;
text-shadow: 0px 0px 5px rgba(96, 163, 255, 0.5)
@ -114,10 +135,51 @@ export default {
height: 36px;
display: flex;
justify-content: flex-end;
.return{
width: 36px;
height: 36px;
margin-right: 60px;
margin-right: 20px;
.user {
margin-right: 20px;
height: 35px;
line-height: 35px;
font-size: 18px;
font-family: D-DIN;
color: #BFDAF1;
text-shadow: 0px 0px 5px rgba(96, 163, 255, 0.5);
position: relative;
.toolip {
position: absolute;
left: -20px;
top: 35px;
width: 80px;
height: 4vh;
line-height: 4vh;
text-align: center;
font-size: 16px;
font-family: D-DIN;
color: #FFFFFF;
text-shadow: 0px 0px 5px rgba(96, 163, 255, 0.5);
display: none;
border: 1px solid rgb(43, 101, 215);
cursor: pointer;
}
}
.user:hover .toolip {
cursor: pointer;
display: block;
}
.user:hover {
cursor: pointer;
}
.return {
width: 30px;
height: 30px;
margin-right: 40px;
cursor: pointer;
}
}

@ -40,7 +40,7 @@ export default {
yAxis: {
type: 'value',
axisLabel: {
// interval: 0, //0
interval: 0, //0
color: '#fff',
// rotate: 0, //01
// align:'center',
@ -99,7 +99,7 @@ export default {
grid: {
top: '10%', //
bottom: '15%', //
left: '10%',
left: '15%',
right: '0'
}
}

@ -1,16 +1,17 @@
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
import { getToken } from "@/utils/auth";
import home from "../views/home";
import layout from "@/views/layout";
import login from '../views/login';
import login from "../views/login";
const routes = [
{
path: "/",
name: "layout",
component: layout,
redirect: "/login",
redirect: "/home",
children: [
{
path: "home",
@ -66,33 +67,33 @@ const routes = [
name: "cptj",
},
},
{
path: "sjzx",
name: "sjzx",
component: () => import("@/views/sjzx"),
meta: {
title: "功能农业生产管理",
name: "sjzx",
},
},
{
path: "sjzx",
name: "sjzx",
component: () => import("@/views/sjzx"),
meta: {
title: "功能农业生产管理",
name: "sjzx",
},
},
{
path: "sjzx",
name: "sjzx",
component: () => import("@/views/sjzx"),
meta: {
title: "功能农业生产管理",
name: "sjzx",
},
},
// {
// path: "sjzx",
// name: "sjzx",
// component: () => import("@/views/sjzx"),
// meta: {
// title: "功能农业生产管理",
// name: "sjzx",
// },
// },
// {
// path: "sjzx",
// name: "sjzx",
// component: () => import("@/views/sjzx"),
// meta: {
// title: "功能农业生产管理",
// name: "sjzx",
// },
// },
// {
// path: "sjzx",
// name: "sjzx",
// component: () => import("@/views/sjzx"),
// meta: {
// title: "功能农业生产管理",
// name: "sjzx",
// },
// },
],
},
{
@ -106,5 +107,16 @@ const router = new VueRouter({
mode: "hash",
routes,
});
router.beforeEach((to, from, next) => {
const hasToken = getToken();
//判断是否存在token值不存在就去登录页面去登录
if (!hasToken) {
if (to.path == "home") {
return next("/login");
}
}
//如果存在就执行下一步
next();
});
export default router;

@ -38,7 +38,6 @@ const user = {
const uuid = userInfo.uuid
return new Promise((resolve, reject) => {
login({ username, password, code, uuid }).then(res => {
setToken(res.token)
commit('SET_TOKEN', res.token)
resolve(res)
@ -54,6 +53,7 @@ const user = {
getInfo().then(res => {
const user = res.user
const avatar = (user.avatar == "" || user.avatar == null) ? '' : process.env.VUE_APP_BASE_API + user.avatar;
localStorage.setItem('user',Object.keys(user).length && JSON.stringify(user))
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)
@ -77,6 +77,7 @@ const user = {
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
resolve()
}).catch(error => {
reject(error)
@ -89,6 +90,7 @@ const user = {
return new Promise(resolve => {
commit('SET_TOKEN', '')
removeToken()
localStorage.removeItem('user')
resolve()
})
},

@ -1,8 +1,8 @@
import axios from 'axios'
import axios from "axios";
//import Vue from 'vue'
import vm from "../main";
import { getToken } from '@/utils/auth'
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
import { getToken } from "@/utils/auth";
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
const request = axios.create({
//baseURL: 'http://172.18.113.50:8080/zhapi',
//baseURL: 'http://172.18.113.13:8080/zhapi', // 孙强
@ -10,86 +10,84 @@ const request = axios.create({
//baseURL: 'http://192.168.0.188:8888/zhapi',
//baseURL: 'http://121.41.91.94:12002/zhapi',
// baseURL: `http://${window.location.host}/zhapi`,
// baseURL: 'http://172.18.113.50:8118/zhapi',
baseURL: 'http://172.18.113.8:8080/zhapi',
// baseURL: 'http://172.18.113.50:8118/zhapi',
baseURL: "http://1.94.45.26:10010/gnny",
timeout: 50000,
headers: { 'content-type': 'application/json' },
})
headers: { "content-type": "application/json" },
});
//const vm = Vue.prototype
// request拦截器
request.interceptors.request.use(config => {
request.interceptors.request.use(
(config) => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false;
// 是否需要防止数据重复提交
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
// 是否需要防止数据重复提交
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
if (getToken() && !isToken) {
config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
//防止重复提交
return config;
},
(error) => {
console.log(error);
Promise.reject(error);
}
//防止重复提交
return config
}, error => {
console.log(error)
Promise.reject(error)
})
);
// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
response => {
(response) => {
if (response.data) {
switch (response.data.code) {
case 200:
// 如果是返回的文件
if (response.config.responseType === 'blob') {
return response.data
if (response.config.responseType === "blob") {
return response.data;
}
// 兼容服务端返回的字符串数据
if (typeof response.data === 'string') {
response.data = response.data ? JSON.parse(response.data) : response.data
if (typeof response.data === "string") {
response.data = response.data
? JSON.parse(response.data)
: response.data;
}
return response.data
return response.data;
case 401:
if (vm.$route.name !== 'login') {
if (vm.$route.name !== "login") {
vm.$message.warning({
content: '身份认证信息已失效,请重新登录。',
content: "身份认证信息已失效,请重新登录。",
duration: 2,
onClose: () => {
vm.$router.push({ name: 'login' })
}
})
vm.$router.push({ name: "login" });
},
});
} else {
return Promise.reject()
return Promise.reject();
}
break
break;
case 403:
vm.$message.warning({
content: response.data.msg,
duration: 3
})
break
duration: 3,
});
break;
case 500:
// 如果是返回的文件
vm.$message.warning({
content: response.data.msg,
duration: 3
})
return response.data
duration: 3,
});
return response.data;
}
}
},
error => {
console.log('err' + error) // for debug
(error) => {
console.log("err" + error); // for debug
return Promise.reject(error)
return Promise.reject(error);
}
);
)
export default request
export default request;

@ -1,6 +1,6 @@
<template>
<div>
<div class='bztx'>
<img src="../../../public/images/bztx.jpg" alt="" style="width: 100%;height: 100vh;">
</div>
</template>
<script>
@ -13,4 +13,9 @@ export default {
},
}
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
.bztx{
// height: 100%;
width: 100%;
}
</style>

@ -2,19 +2,25 @@
<div class="company-wrap">
<titleCard>龙头企业
</titleCard>
<div class="company-content">
<div class="company-content" v-if="companyList.length">
<vue-seamless-scroll :data="companyList" :class-option="classOption">
<div class="company-item" v-for="(item, index) in companyList" :key="'company' + index">
<img :src="item.src" alt="" style="width: 100%;height: 100%;z-index: 10086;">
<div class="item-wrap">
<div class="company-item" v-for="(item, index) in companyList" :key="'company' + index">
<img :src="item.src" alt="" style="width: 100%;height: 100%;z-index: 10086;">
<div class="item-content">{{ item.brandName }}</div>
</div>
</div>
</vue-seamless-scroll>
</div>
<div class="company-content" v-else>
暂无数据
</div>
</div>
</template>
<script>
import vueSeamlessScroll from "vue-seamless-scroll"
import { regionalBrand } from '../../../api/cptj'
export default {
components: {
vueSeamlessScroll,
@ -35,32 +41,24 @@ export default {
},
data() {
return {
companyList: [{
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
},
{
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}, {
src: 'https://file1.renrendoc.com/fileroot2/2020-1/13/dddfabab-7117-4fab-a62f-d168703c441e/dddfabab-7117-4fab-a62f-d168703c441e1.gif'
}]
srcPre: [],
companyList: []
}
},
mounted() {
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
console.log(this.srcPre)
regionalBrand().then(res => {
if (res.code == 200) {
this.companyList = res.data
this.companyList.forEach(item => {
item.src = this.srcPre + item.brandPic
});
console.log(this.companyList)
}
})
},
methods: {
@ -71,17 +69,25 @@ export default {
.company-wrap {
.company-content {
height: 100px;
height: 158px;
overflow: hidden;
.company-item {
display: inline-block;
margin: 0 3.5px;
width: 130px;
height: 100px;
margin: 3px 5px;
width: 195px;
height: 130px;
border: 4px solid #2A70C6;
}
.company-item:hover{
.item-content{
font-family: PingFangSC, PingFang SC;
text-align: center;
font-size: 16px;
font-weight: bold;
margin: 2px;
}
.company-item:hover {
cursor: pointer;
}
}

@ -14,10 +14,11 @@
</div>
</template>
<script>
import { salesDataByMonth } from '../../../api/cptj'
export default {
data() {
return {
sealAll: [2, 5, 0, 0, 9],
sealAll: [],
option: {
title: {
text: ''
@ -46,15 +47,16 @@ export default {
top: '20%',
left: '0',
right: '10%',
bottom: '3%',
bottom: '0',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
name: '月',
// data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
data: [],
name: '日期',
nameTextStyle: { //
color: '#ECF4F9', //
fontSize: 12, // ()
@ -62,31 +64,31 @@ export default {
// fontstyle: 'normal', // (normal italic oblique)
// fontFamily: '', // ( )
},
axisTick: { //
show: false, //
inside: true, // (true false)
alignWithLabel: true, //线
length: 5, //
lineStyle: { //
color: 'black', //
width: 2, // ()
type: 'solid' // (solid dotted dashed)
axisTick: { //
show: false,//
inside: true, //(true false)
alignWithLabel: true,//线
length: 5,//
lineStyle: {//
color: 'black',//
width: 2,// ()
type: 'solid'// (solid dotted dashed)
}
},
// splitLine: { //线
// show: true, //
// lineStyle: { //线
// color: '#ECF4F9', //线
// width: 1, //线
// type: 'dashed', //线
// splitLine: {//线
// show: true,//
// lineStyle: {//线
// color: '#ECF4F9',//线
// width: 1,//线
// type: 'dashed',//线
// opacity: 0.2
// }
// },
axisLabel: {
interval: 0, //0
color: '#ECF4F9',
// rotate: 45, //01
align: 'center',
rotate: 45, //01
// align: 'center',
fontSize: 12,
lineHeight: 14,
textStyle: {
@ -99,7 +101,7 @@ export default {
],
yAxis: {
type: 'value',
name: '元',
name: '元',
show: true,
nameTextStyle: { //
color: '#ECF4F9', //
@ -210,12 +212,52 @@ export default {
},
methods: {
getdsxhEchart() {
var chartDom = document.getElementById('dsxh');
var myChart = this.$echarts.init(chartDom);
let data = [10000, 20000, 25000, 45000, 36000, 24000, 22000, 17000, 42000, 35000]
this.option.series[0].data = data
this.option && myChart.setOption(this.option);
}
salesDataByMonth().then(res => {
if (res.code == 200) {
var chartDom = document.getElementById('dsxh');
var myChart = this.$echarts.init(chartDom);
var xAxisData = []
var data = []
var allData = 0
for (const key in res.data) {
// let monthItem = key && key.split("-")[1]
// 0
// let monthItemNew = monthItem.replace(/^0+/, '')
// xAxisData.push(monthItemNew)
xAxisData.push(key)
data.push(res.data[key])
allData += res.data[key] * 1
}
// var formatAllData = this.formatNumber(allData)
// this.sealAll = formatAllData.split("")
this.sealAll = String(allData).split("")
console.log(111, allData, this.sealAll)
this.option.xAxis[0].data = xAxisData
this.option.series[0].data = data
this.option && myChart.setOption(this.option);
}
})
},
//
formatNumber(num) {
num = Number(num);
if (num == 0) {
return num + "";
} else {
if ((num / 10000).toFixed(2) == 0) {
//1002
return (num / 100).toFixed(4)
} else {
// parseFloat() 050.00
//1000
return parseFloat((num / 10000).toFixed(2))
}
}
},
}
}
</script>
@ -252,7 +294,7 @@ export default {
}
.dsxh-chart {
height: 185px;
height: 200px;
}
}

@ -5,16 +5,13 @@
<vue-seamless-scroll :data="exportList" :class-option="classOption">
<div class="item" v-for="(item, index) in exportList" :key="'export' + index">
<div class="name">
{{ item.name }}
{{ item.expertName }}
</div>
<div class="xl" style="color: #00D8FF;">
{{ item.xl }}
</div>
<div class="jb">
{{ item.jb }}
{{ item.expertPosition }}
</div>
<div class="dw" :title="item.dw">
{{ item.dw }}
{{ item.expertUnit }}
</div>
</div>
</vue-seamless-scroll>
@ -23,6 +20,7 @@
</template>
<script>
import vueSeamlessScroll from "vue-seamless-scroll"
import { industryExperts } from '../../../api/cptj'
export default {
components: {
vueSeamlessScroll,
@ -45,48 +43,16 @@ export default {
return {
//
exportList: [
{
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
},
{
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '南京恒宝功能物业产业园创新中心'
},
{
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
},
{
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
},
{
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
}, {
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
}, {
name: '尹雪彬',
xl: '研究院',
jb: '国家级',
dw: '中国科学技术大学'
},
],
}
},
created() {
industryExperts().then(res => {
if (res.code == 200) {
this.exportList = res.data
}
})
}
}
</script>
@ -94,8 +60,9 @@ export default {
.export {
font-size: 14px;
font-family: PingFangSC, PingFang SC;
.export-wrap {
height: 200px;
height: 380px;
overflow: hidden;
width: 100%;
@ -109,17 +76,15 @@ export default {
align-items: center;
.name,
.xl,
.jb {
width: 20%;
height: 40px;
line-height: 40px;
.xl {
width: 25%;
text-align: center;
}
.dw {
text-align: left;
text-align: center;
width: 40%;
width: 50%;
height: 40px;
line-height: 40px;
white-space: nowrap;

@ -3,24 +3,39 @@
<titleCard>新闻报道</titleCard>
<div class="news-wrap">
<vue-seamless-scroll :data="newsList" :class-option="classOption">
<div class="item" v-for="(item, index) in newsList" :key="'news' + index">
<div class="item-left">
<div class="item" v-for="(item, index) in newsList" :key="'news' + index" @click="openNews(item)">
<div class="item-left" :title="item.newsTitle">
<img src="../../../../public/images/news-bg.png" alt="">
<span>{{ item.title }}</span>
<span>{{ item.newsTitle }}</span>
</div>
<div class="time">
{{ item.time }}
{{ item.newsTime && item.newsTime.split(" ")[0] }}
</div>
</div>
</vue-seamless-scroll>
</div>
<el-dialog title="新闻报道" :visible.sync="showNewsDialog" :append-to-body="false">
<div class="newContent">
<h2>{{ itemContent.newsTitle }}</h2>
<p class="time">发稿时间:{{ itemContent.newsTime }}&nbsp;&nbsp;
<!-- 作者:{{ itemContent.createBy }} -->
</p>
<p class="content">
{{ itemContent.newsContent }}
</p>
</div>
</el-dialog>
</div>
</template>
<script>
import vueSeamlessScroll from "vue-seamless-scroll"
import { newsReporting } from '../../../api/cptj'
export default {
components: {
vueSeamlessScroll,
},
computed: {
classOption() {
@ -38,36 +53,26 @@ export default {
},
data() {
return {
showNewsDialog: false,
itemContent: {},
//
newsList: [
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}
],
}
},
created() {
newsReporting().then(res => {
if (res.code == 200) {
this.newsList = res.data
}
})
},
methods: {
openNews(newsContent) {
this.itemContent = newsContent
this.showNewsDialog = true
},
}
}
</script>
@ -88,12 +93,75 @@ export default {
padding: 0 20px;
margin-bottom: 10px;
.item-left {
width: 70%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
img {
width: 14px;
vertical-align: -2px;
margin-right: 5px;
}
}
.item:hover {
cursor: pointer;
}
}
.newContent {
height: 550px;
background-color: #fff;
box-sizing: border-box;
padding: 20px 40px;
overflow: auto;
h2 {
text-align: center;
}
.time {
text-align: center;
}
.content {
text-indent: 2em;
/* 可以根据需要调整缩进的大小 */
line-height: 20px;
}
}
}
/deep/ .el-dialog__title {
color: #fff;
font-weight: bold;
}
/deep/ .el-dialog__body {
padding: 0 20px 20px;
}
/deep/.el-dialog__wrapper {
// position: absolute !important;
margin: auto;
height: 70%;
width: 40%;
background-image: url('../../../../public/images/dialog.png');
background-size: 100% 100%;
}
/deep/ .el-dialog {
background: none;
height: 100%;
width: 100%;
margin: 0;
margin-top: 0 !important;
}
</style>

@ -1,6 +1,6 @@
<template>
<div class="sealData-wrap">
<titleCard>企业销售数据(2024)
<titleCard>企业销售数据({{ sealTime + "年" }})
</titleCard>
<div class="seal-content">
<div class="left-content">
@ -8,18 +8,18 @@
<img src="../../../../public/images/jb.png" alt="" style="width: 100%;height: 100%;">
</div>
<div class="jb-title">
89
{{ sealMoney + '万' }}
</div>
</div>
<div class="right-content">
<data class="items">
<div class="label">示范镇</div>
<data class="items" v-for="item in sealList" :key="item.id">
<div class="label">{{ item.companyName }}</div>
<div class="percentage zColor">
<el-progress :percentage="70" :format="format"></el-progress>
<el-progress :percentage="item.salesAmount * 1" :format="format"></el-progress>
</div>
</data>
<data class="items ">
<!-- <data class="items ">
<div class="label">示范村</div>
<div class="percentage cColor">
<el-progress :percentage="45" :format="format"></el-progress>
@ -33,23 +33,38 @@
</div>
</data>
<data class="items ">
<div class="label xmColor">示范项目</div>
<div class="percentage">
<div class="label">示范项目</div>
<div class="percentage xmColor">
<el-progress :percentage="26" :format="format"></el-progress>
</div>
</data>
</data> -->
</div>
</div>
</div>
</template>
<script>
import { enterpriseSalesData } from '../../../api/cptj'
export default {
data() {
return {
sealTime: '',//
sealList: [],
sealMoney: 0
}
},
created() {
enterpriseSalesData().then(res => {
if (res.code == 200) {
this.sealList = res.data
this.sealTime = res.data[0].saleTime && res.data[0].saleTime.split(" ")[0].split("-")[0]
this.sealMoney = 0
this.sealList.forEach(item => {
this.sealMoney += item.salesAmount * 1
})
}
})
},
mounted() {
},
@ -63,8 +78,6 @@ export default {
</script>
<style lang="less" scoped>
.sealData-wrap {
.seal-content {
display: flex;
height: 172px;
@ -103,6 +116,7 @@ export default {
.right-content {
width: calc(100% - 122px);
height: 172px;
overflow: auto;
.items {
height: 25% !important;

@ -3,32 +3,34 @@
<titleCard>统计
</titleCard>
<div class="tongji-wrap">
<div class="tongji-item">
<div class="num">2533</div>
<div class="tj-title">产业基地</div>
</div>
<div class="tongji-item">
<div class="num">2533</div>
<div class="tj-title">科研单位</div>
</div>
<div class="tongji-item">
<div class="num">2533</div>
<div class="tj-title">产业单位</div>
<div class="tongji-item" v-for="(item, index) in tiList" :key="'tj' + index">
<div class="num">{{ item.num }}</div>
<div class="tj-title">{{ item.name }}</div>
</div>
</div>
</div>
</template>
<script>
import { enterpriseTypeStatistics } from '../../../api/cptj'
export default {
data() {
return {
tiList: []
}
},
mounted() {
created() {
enterpriseTypeStatistics().then(res => {
this.tiList = []
if (res.code == 200) {
for (const key in res.data) {
this.tiList.push({
name: key,
num: res.data[key]
})
}
}
})
},
methods: {

@ -5,16 +5,43 @@
position: absolute;
right: 20px;
top: 15px;"> -->
<div class="space">
<div class="space-content">
<el-checkbox-group v-model="checkValueList">
<el-row>
<el-col>
<div class="item">
<el-checkbox label="产业基地"></el-checkbox>
</div>
</el-col>
<el-col>
<div class="item">
<el-checkbox label="科研单位"></el-checkbox>
</div>
</el-col>
<el-col>
<div class="item">
<el-checkbox label="产业单位"></el-checkbox>
</div>
</el-col>
</el-row>
</el-checkbox-group>
</div>
</div>
<div class="seaList">
<div class="month">
<el-date-picker v-model="month" type="month" placeholder="选择月"> </el-date-picker>
<el-date-picker v-model="month" type="month" placeholder="选择月" @change="changeMontn" value-format="yyyy-MM">
</el-date-picker>
</div>
<div class="seal-content">
<div class="item item1">
<div class="content">
<div class="label">
<span class="ds">电商</span>
<div class="money" style=" color: #00D8FF;">166.7<span class="dw">万元</span></div>
<div class="money" style=" color: #00D8FF;">{{ dsList.num }}<span class="dw">万元</span></div>
</div>
<div class="percentage zColor">
<el-progress :percentage="70" :format="format" :text-inside="true"></el-progress>
@ -25,7 +52,7 @@
<div class="content">
<div class="label">
<span class="ds">销售总额</span>
<div class="money" style=" color: #37FDC7;">817.74<span class="dw">万元</span></div>
<div class="money" style=" color: #37FDC7;">{{ xsList.num }}<span class="dw">万元</span></div>
</div>
<div class="percentage zColor">
<el-progress :percentage="70" :format="format" :text-inside="true"></el-progress>
@ -36,7 +63,7 @@
<div class="content">
<div class="label">
<span class="ds">线下门店</span>
<div class="money" style=" color: #FFCC22;">28.67<span class="dw">万元</span></div>
<div class="money" style=" color: #FFCC22;">{{ mdList.num }}<span class="dw">万元</span></div>
</div>
<div class="percentage zColor">
<el-progress :percentage="70" :format="format" :text-inside="true"></el-progress>
@ -55,11 +82,12 @@
<tongji />
<company />
<exportor />
<hypt />
<!-- <hypt /> -->
</div>
</div>
</template>
<script>
import { salesData, administrativeUnit } from '../../api/cptj'
import nationWide from '../../utils/nationWide.js';
import dsxh from './components/dsxh.vue'
import news from './components/news.vue'
@ -67,7 +95,7 @@ import sealData from './components/sealData.vue'
import tongji from './components/tongji.vue'
import company from './components/company.vue'
import exportor from './components/exportor.vue'
import hypt from './components/hypt.vue'
// import hypt from './components/hypt.vue'
export default {
components: {
dsxh,
@ -76,10 +104,11 @@ export default {
tongji,
company,
exportor,
hypt
// hypt
},
data() {
return {
checkValueList: [],
month: '',
isreturn: false, //
mapChart: null, //
@ -88,19 +117,68 @@ export default {
{ name: "西藏", value: [91.23, 29.5, 2333] },
{ name: "黑龙江", value: [128.03, 47.01, 1007] },
],
dsList: {},
xsList: {},
mdList: {}
}
},
created() {
//
this.$store.commit('SET_ROUTERINFO', this.$route.meta)
const date = new Date();
const year = date.getFullYear()
var currentMonth = date.getMonth() + 1;
if (currentMonth < 10) {
currentMonth = '0' + currentMonth
}
this.month = year + '-' + currentMonth
console.log(444, year + '-' + currentMonth);
this.getSeatData(this.month)
this.getMapData()
},
mounted() {
this.getMap()
},
methods: {
getMapData() {
administrativeUnit().then(res => { })
},
getMap() { //
changeMontn(year) {
console.log(year)
year && this.getSeatData(year)
},
getSeatData(year) {
let params = {
data: year
}
salesData(params).then(res => {
this.dsList = {}
if (res.code == 200) {
for (const key in res.data) {
if (key == '电商') {
this.dsList.name = '电商',
this.dsList.num = res.data[key]
}
if (key == '总销售额') {
this.xsList.name = '总销售额',
this.xsList.num = res.data[key]
}
if (key == '线下门店') {
this.mdList.name = '线下门店',
this.mdList.num = res.data[key]
}
}
console.log(7777, this.dsList)
}
})
},
//
getMap() {
if (!this.mapChart) {
this.mapChart = this.$echarts.init(document.getElementById('map'));
}
@ -266,12 +344,40 @@ export default {
overflow: auto;
/deep/ .el-input__inner {
background: rgb(12,38,74) !important;
background: rgb(12, 38, 74) !important;
// border:20px #2784EE !important ;
color: #FFF;
font-weight: 400;
}
.space {
position: absolute;
width: 140px;
// border: 1px solid red;
left: 1250px;
top: 150px;
z-index: 1800;
text-align: center;
box-sizing: border-box;
.space-content {
background-image: url('../../../public/images/dialog.png');
background-size: 100% 100%;
opacity: 0.8;
.item {
height: 40px;
line-height: 40px;
// color: #00D8FF;
}
}
/deep/ .el-checkbox {
color: rgb(0, 231, 140)
}
}
.seaList {
height: 70px;
width: 950px;

@ -1,14 +1,14 @@
<template>
<div class="base">
<titleCard>基本资源</titleCard>
<div class="base-content">
<div class="base-content wrap-h">
<div class="one">
<div class="title">
<img src="../../../../public/images/base-icon.png" alt="">
<span>总耕地面积</span>
</div>
<div class="base-content">
<span class="sl">111</span>
<span class="sl">{{ cultivatedArea }}</span>
<span class="dw">万亩</span>
</div>
</div>
@ -18,7 +18,7 @@
<span>富硒耕地面积</span>
</div>
<div class="base-content">
<span class="sl">10</span>
<span class="sl">{{ seleniumCultivatedArea }}</span>
<span class="dw">万亩</span>
</div>
</div>
@ -31,7 +31,7 @@
<div class="three-wrap three-d">
<span>平均值</span>
<span>
<span class="sl">0.465</span>
<span class="sl">{{ seleniumAverage }}</span>
<span class="dw">微克/</span>
</span>
@ -39,7 +39,7 @@
<div class="three-wrap">
<span>背景值</span>
<span>
<span class="sl">0.425</span>
<span class="sl">{{ seleniumBackground }}</span>
<span class="dw">微克/</span>
</span>
</div>
@ -49,27 +49,45 @@
</div>
</template>
<script>
import { industrialPlanBasicResources } from '../../../api/cygh'
export default {
data() {
return {}
}
return {
cultivatedArea: '',
seleniumCultivatedArea: '',
seleniumAverage: '',
seleniumBackground: '',
}
},
created() {
industrialPlanBasicResources().then(res => {
if (res.code == 200) {
this.cultivatedArea = res.data[0].cultivatedArea
this.seleniumCultivatedArea = res.data[0].seleniumCultivatedArea
this.seleniumAverage = res.data[0].seleniumAverage
this.seleniumBackground = res.data[0].seleniumBackground
}
})
},
}
</script>
<style lang="less" scoped>
.base {
border: 1px solid red;
.base-content {
display: flex;
justify-content: space-between;
white-space: nowrap;
.one,
.two,
.three {
height: 100px;
height: 8.7vh;
font-size: 12px;
.title {
height: 34px;
height: 3.478vh;
display: flex;
align-items: center;
@ -98,11 +116,11 @@ export default {
}
.three-wrap {
height: 23px;
height: 20px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 10px;
padding:0 10px;
.sl {
font-size: 18px;
@ -113,7 +131,7 @@ export default {
}
.three-d {
margin-top: 5px;
// margin-top: 1px;
}
}
@ -130,5 +148,8 @@ export default {
background-size: 100% 100%;
}
}
.wrap-h{
height: 8.7vh;
}
}
</style>

@ -7,6 +7,7 @@
</div>
</template>
<script>
import { industrialPlanComprehensiveCurve } from '../../../api/cygh'
export default {
data() {
return {
@ -45,13 +46,14 @@ export default {
{
type: 'category',
boundaryGap: false,
data: ['2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023'],
data: [],
// data: ['2008'],
axisLabel: {
interval: 0, //0
color: '#ECF4F9',
rotate: 45, //01
align: 'center',
fontSize: 12,
// align: 'center',
fontSize: 10,
lineHeight: 14,
textStyle: {
with: '30px',
@ -70,18 +72,18 @@ export default {
color: '#ECF4F9',
// rotate: 0, //01
// align:'center',
fontSize: 12,
fontSize: 10,
},
splitLine: { //线
show: true, //
lineStyle: { //线
color: '#ECF4F9', //线
width: 1, //线
type: 'dashed', //线
width: 0.5, //线
type: 'solid', //线
opacity: 0.2
}
},
axisLine: { show: true, },
axisLine: { show: false, },
},
series: [
{
@ -89,16 +91,16 @@ export default {
type: 'line',
stack: 'Total',
smooth: true,
showSymbol: true,
showSymbol: false,
emphasis: {
focus: 'series'
},
// 线
lineStyle: {
normal: {
width: 2,
width: 1,
color: new this.$echarts.graphic.LinearGradient(0, 0, 1, 0, [ //
{
offset: 0,
@ -153,7 +155,8 @@ export default {
}
},
data: [140, 232, 101, 264, 90, 340, 250, 101, 264, 90, 340, 101, 264, 90, 340, 250, 101]
// data: [101]
data: []
},
]
@ -165,9 +168,30 @@ export default {
},
methods: {
getZxEchart() {
var chartDom = document.getElementById('main');
var myChart = this.$echarts.init(chartDom);
this.option && myChart.setOption(this.option);
industrialPlanComprehensiveCurve().then(res => {
if (res.code == 200) {
this.$nextTick(() => {
// // x
this.option.xAxis[0].data = res.data.map(item => {
return item.annualValueTime && item.annualValueTime.split(" ")[0].split("-")[0]
})
// y
this.option.series[0].data = res.data.map(item => {
return item.annualValue * 1
})
var chartDom = document.getElementById('main');
var myChart = this.$echarts.init(chartDom);
this.option && myChart.setOption(this.option);
console.log(999, this.option)
})
}
})
}
}
}
@ -177,5 +201,6 @@ export default {
.cyfz-zx {
height: 290px;
}
}
</style>

@ -2,36 +2,48 @@
<div class="fx">
<titleCard>富硒产业</titleCard>
<div class="fx-wrap">
<data class="item">
<div class="label">示范镇</div>
<div class="percentage zColor">
<el-progress :percentage="70" :format="format"></el-progress>
</div>
</data>
<data class="item margin-top">
<div class="label">示范村</div>
<div class="percentage cColor">
<el-progress :percentage="45" :format="format"></el-progress>
</div>
<template v-if="fxList.length">
<data class="item" :class="{ marginTop: item.id != 0 }" v-for="item in fxList " :key="item.id">
<div class="left"
:class="{ img1: item.id == 1, img2: item.id == 2, img3: item.id == 3, img4: item.id == 4 }">
<span>{{ 'Top' + item.id }}</span>
</div>
<div class="right">
<div class="label">{{ item.estateName }}</div>
<div class="percentage"
:class="{ zColor: item.id == 1, cColor: item.id == 2, jdColor: item.id == 3, xmColor: item.id == 4 }">
<el-progress :percentage="item.estateValue * 1" :format="format"></el-progress>
</div>
</div>
</data>
<data class="item margin-top">
<div class="label">示范基地</div>
<div class="percentage jdColor">
<el-progress :percentage="32" :format="format"></el-progress>
</data>
</template>
<template v-else>
<div class="nodata">
暂无数据
</div>
</data>
<data class="item margin-top">
<div class="label xmColor">示范项目</div>
<div class="percentage">
<el-progress :percentage="26" :format="format"></el-progress>
</div>
</data>
</template>
</div>
</div>
</template>
<script>
import { industrialPlanSeleniumRichIndustry } from '../../../api/cygh'
export default {
data() {
return {
fxList: []
}
},
created() {
industrialPlanSeleniumRichIndustry().then(res => {
if (res.code == 200) {
this.fxList = res.data
}
})
},
methods: {
//
format(percentage) {
@ -42,26 +54,63 @@ export default {
</script>
<style lang="less" scoped>
.fx {
border: 0.01px solid red;
.fx-wrap {
height: 16vh;
.item {
display: flex;
justify-content: center;
align-items: center;
.label {
width: 15%;
.left {
width: 17%;
height: 25px;
line-height: 25px;
position: relative;
z-index: 1000;
text-align: center;
font-size: 14px;
// color: rgb(252, 210, 68);
margin-right: 3%;
}
.img1 {
background-image: url('../../../../public/images/top1.png');
background-size: 100% 100%;
}
.img2 {
background-image: url('../../../../public/images/top2.png');
background-size: 100% 100%;
}
.img3 {
background-image: url('../../../../public/images/top3.png');
background-size: 100% 100%;
}
.percentage {
width: 85%;
.img4 {
background-image: url('../../../../public/images/top4.png');
background-size: 100% 100%;
}
.right {
width: 80%;
.label {
width: 50%;
font-size: 14px;
white-space: nowrap;
}
.percentage {
width: 100%;
}
}
}
.item /deep/ .el-progress-bar__outer {
height: 12px !important;
height: 5px !important;
}
.item .zColor /deep/ .el-progress-bar__inner {
@ -81,12 +130,34 @@ export default {
}
.item /deep/ .el-progress-bar__outer {
background-color: rgb(56, 78, 112) !important;
border-radius: 0.5px;
}
.item /deep/ .el-progress__text {
color: #fff !important;
position: absolute;
top: -16px;
}
.margin-top {
margin-top: 20px;
.item /deep/ .percentage {
width: 100% !important;
}
.item /deep/ .el-progress-bar {
padding-right: 0;
}
.marginTop {
margin-top: 4px;
}
.nodata {
width: 100;
text-align: center;
height: 130px;
line-height: 130px;
color: #85BEFF;
font-size: 14px;
}
}
}
</style>
}</style>

@ -2,39 +2,47 @@
<template>
<!-- 已封装 可复用 -->
<div class="fx-wrap">
<titleCard>富硒产业</titleCard>
<titleCard>富硒产业</titleCard>
<div class="yearList">
<div class="year" :class="{ yearCctive: yearCctive == item.index }" v-for="item in yearList" :key="item.index"
@click="handleYear(item.year, item.index)">{{
item.year }}</div>
item.year + '年' }}</div>
</div>
<div class="fxcz">
<div class="chart-container">
<div class="year-zh">
<div class="year-num">年综合(150000)</div>
<template v-if="fxczList.length">
<div class="chart-container">
<div class="year-zh">
<div class="year-num">年综合({{ yaerZh }})</div>
</div>
<div :id="id" class="chart" style="width: 100%;height: 100%;z-index: 1;">
</div>
</div>
<div :id="id" class="chart" style="width: 100%;height: 100%;z-index: 1;">
<div class="fx-content">
<div class="item" v-for="(item, index) in fxczList" :key="'fxcz' + index">
<span>
<span class="inco"
:style="item.label == '农业' ? 'background-color:rgb(91,181,251)' : item.label == '工业' ? 'background-color:rgb(70,105,229)' : item.label == '养生旅游业' ? 'background-color:rgb(43,203,193)' : 'background-color:rgb(29,231,179)'"></span>
<span>{{ item.label }}</span>
</span>
<span>
<span class="num">{{ item.num }}</span>
<span>{{ item.parcent + '%' }}</span>
</span>
</div>
</div>
</div>
<div class="fx-content">
<div class="item" v-for="(item, index) in fxczList" :key="'fxcz' + index">
<span>
<span class="inco"
:style="item.label == '农业' ? 'background-color:rgb(91,181,251)' : item.label == '工业' ? 'background-color:rgb(70,105,229)' : item.label == '养生旅游业' ? 'background-color:rgb(43,203,193)' : 'background-color:rgb(29,231,179)'"></span>
<span>{{ item.label }}</span>
</span>
<span>
<span class="num">{{ item.num }}</span>
<span>{{ item.parcent + '%' }}</span>
</span>
</template>
<template v-else>
<div style="width: 100%;text-align: center;">
暂无数据
</div>
</div>
</template>
</div>
</div>
</template>
<script>
import HighCharts from "highcharts";
import { industrialPlanIndustrialOutputValue } from '../../../api/cygh'
export default {
data() {
return {
@ -42,19 +50,19 @@ export default {
//
yearList: [
{
year: Number(new Date().getFullYear()) - 3 + '年',
index: 0
year: Number(new Date().getFullYear()) - 3,
index: 0,
},
{
year: Number(new Date().getFullYear()) - 2 + '年',
year: Number(new Date().getFullYear()) - 2,
index: 1
},
{
year: Number(new Date().getFullYear()) - 3 + '年',
year: Number(new Date().getFullYear()) - 1,
index: 2
},
{
year: Number(new Date().getFullYear()) + '年',
year: Number(new Date().getFullYear()),
index: 3
}
],
@ -129,54 +137,80 @@ export default {
],
},
fxczList: [
{
label: '农业',
num: 23560,
parcent: 56,
bcColor: 'rgb(91,181,251)'
},
{
label: '工业',
num: 22024,
parcent: 30,
bcColor: 'rgb(70,105,229)'
},
{
label: '养生旅游业',
num: 11438,
parcent: 11,
bcColor: 'rgb(43,203,193)'
},
{
label: '其他',
num: 5096,
parcent: 56,
bcColor: 'rgb(29,231,179)'
}
]
// {
// label: '',
// num: 23560,
// parcent: 56,
// bcColor: 'rgb(91,181,251)'
// },
// {
// label: '',
// num: 22024,
// parcent: 30,
// bcColor: 'rgb(70,105,229)'
// },
// {
// label: '',
// num: 11438,
// parcent: 11,
// bcColor: 'rgb(43,203,193)'
// },
// {
// label: '',
// num: 5096,
// parcent: 56,
// bcColor: 'rgb(29,231,179)'
// }
],
yaerZh: 0,
};
},
created() {
console.log(new Date().getFullYear())
},
mounted() {
let data = [
["普通岗位", Number(100)],
["重点岗位", Number(150)],
["专家岗位", Number(31200)],
["重点人员", Number(900)],
this.getfxczEcharts(Number(new Date().getFullYear()) - 3)
];
this.option.series[0].data = data;
HighCharts.chart('fxcz', this.option);
},
destroyed() {
window.removeEventListener("resize", this.initOption);
},
methods: {
getfxczEcharts(year) {
let params = {
year
}
industrialPlanIndustrialOutputValue(params).then(res => {
this.fxczList = []
this.option.series[0].data = []
if (res.code == 200 && res.data.length) {
this.yaerZh = 0
res.data.forEach(item => {
this.yaerZh += item.seleniumArea * 1
})
this.fxczList = res.data.map(item => {
return {
label: item.seleniumName,
num: item.seleniumArea,
parcent: ((item.seleniumArea / this.yaerZh) * 100).toString().substring(0, 4)
}
})
this.option.series[0].data = res.data.map(item => {
return [item.seleniumName, item.seleniumArea * 1]
});
this.$nextTick(() => {
HighCharts.chart('fxcz', this.option);
})
}
})
},
//
handleYear(year, index) {
console.log(year)
this.yearCctive = index
this.getfxczEcharts(year)
}
},
};
@ -185,6 +219,7 @@ export default {
.fx-wrap {
color: #85BEFF;
font-size: 14px;
border: 1px solid red;
.yearList {
display: flex;
@ -223,7 +258,7 @@ export default {
.year-zh {
position: absolute;
top: 15%;
left: 15%;
left: 18%;
// border: 1px solid red;
text-align: center;

@ -6,34 +6,35 @@
</div>
</template>
<script>
import { industrialPlanMarketSubject } from '../../../api/cygh'
export default {
data() {
return {
option: {
xAxis: {
type: 'category',
data: ['硒产业\n经营主体', '中规上富\n硒产业', '富硒\n合作社', '富硒\n家庭农场', '富硒\n种植大户'],
data: [],
axisLabel: {
interval: 0, //0
color: '#fff',
rotate: 0, //01
align: 'center',
fontSize: 12,
fontSize: 10,
lineHeight: 14,
textStyle: {
with: '30px',
wordBreak: 'break-all'
}
// textStyle: {
// with: '30px',
// wordBreak: 'break-all'
// }
},
axisTick: { //
show: false, //
inside: true, // (true false)
alignWithLabel: true, //线
length: 5, //
lineStyle: { //
color: 'black', //
width: 2, // ()
type: 'solid' // (solid dotted dashed)
axisTick: { //
show: false, //
inside: true, //(truefalse)
alignWithLabel: true,//线
length: 5,//
lineStyle: {//
color: 'black',//
width: 2,//()
type: 'solid'//(solid dotted dashed)
}
},
},
@ -43,27 +44,27 @@ export default {
show: true, //
lineStyle: { //线
color: '#ECF4F9',//线
width: 1,//线
type: 'dashed',//线
width: 0.5,//线
type: 'solid',//线
opacity: 0.2
}
},
// min: 'dataMin', //
// scale: true, //0
axisLine: { show: true, },
// axisLine: { show: true, },
axisLabel: {
// interval: 0, //0
color: '#fff',
// rotate: 0, //01
// align:'center',
fontSize: 12,
fontSize: 10,
}
},
series: [
{
data: [100, 200, 600, 80, 70],
data: [],
type: 'bar',
barWidth: 30, //
barWidth: 16, //
showBackground: true,
//
itemStyle: {
@ -78,18 +79,18 @@ export default {
])
},
//
// emphasis: {
// itemStyle: {
// color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
// { offset: 0, color: '#2378f7' },
// { offset: 0.7, color: '#2378f7' },
// { offset: 1, color: '#83bff6' }
// ])
// }
// },
emphasis: {
itemStyle: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#2378f7' },
{ offset: 0.7, color: '#2378f7' },
{ offset: 1, color: '#83bff6' }
])
}
},
//
label: {
show: true,
show: false,
position: 'inside',
textStyle: {
color: '#fff',
@ -98,36 +99,54 @@ export default {
}
}
],
grid: {
top: '10%', //
bottom: '22%', //
left: '8%',
right: '0'
}
// grid: {
// top: '10%', //
// bottom: '22%', //
// left: '8%',
// right: '0'
// }
}
}
},
mounted() {
this.getFxEcharts()
window.addEventListener("resize", () => {
this.mapChart.resize();
});
},
methods: {
//
getFxEcharts() {
var chartDom = document.getElementById('fxzt');
var myChart = this.$echarts.init(chartDom);
this.option && myChart.setOption(this.option);
window.addEventListener("resize", () => {
this.mapChart.resize();
});
industrialPlanMarketSubject().then(res => {
if (res.code == 200) {
// x
this.option.xAxis.data = res.data.map(item => {
return item.marketSubjectName
})
// y
this.option.series[0].data = res.data.map(item => {
return item.marketSubjectValue
})
this.option && myChart.setOption(this.option);
}
})
},
}
}
</script>
<style lang="less" scoped>
.fxzt {
.fx-z {
height: 180px;
border: 0.01px solid red;
height: 14vh;
}
}
</style>

@ -2,22 +2,43 @@
<div class="sf">
<titleCard>示范项目</titleCard>
<div class="sf-wrap">
<vue-seamless-scroll :data="sfList" :class-option="classOption">
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.title }}</span>
</div>
<div class="time">
{{ item.time }}
<template v-if="showScroll">
<vue-seamless-scroll :data="sfList" :class-option="classOption">
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.projectName }}</span>
</div>
<div class="time">
{{ item.updateTime }}
</div>
</div>
</vue-seamless-scroll>
</template>
<template v-else>
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<template v-if="sfList.length == 1">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.projectName }}</span>
</div>
<div class="time">
{{ item.updateTime }}
</div>
</template>
<template v-else>
<div style="width: 100%;text-align: center;">
暂无数据
</div>
</template>
</div>
</vue-seamless-scroll>
</template>
</div>
</div>
</template>
<script>
import vueSeamlessScroll from "vue-seamless-scroll"
import { industrialPlanDemonstrationProject } from '../../../api/cygh'
export default {
components: {
vueSeamlessScroll,
@ -25,7 +46,7 @@ export default {
computed: {
classOption() {
return {
step: 0.2, //
step: 0, //
limitMoveNum: 1, // this.dataList.length
hoverStop: true, // stop
direction: 1, // 0 1 2 3
@ -40,47 +61,37 @@ export default {
return {
//
sfList: [
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}
],
showScroll: false
}
},
created() {
industrialPlanDemonstrationProject().then(res => {
if (res.code == 200) {
this.sfList = res.data
if (this.sfList.length > 1) {
this.showScroll = true
} else {
this.showScroll = false
}
}
})
}
}
</script>
<style lang="less" scoped>
.sf {
font-size: 14px;
border: 0.01px solid red;
.sf-wrap {
height: 232px;
height: 18.9vh;
overflow: hidden;
.item {
height: 48px;
height: 35px;
background-image: url('../../../../public/images/sf-bg.png');
display: flex;
align-items: center;

@ -1,54 +1,77 @@
<template>
<div class="zczc-wrap">
<titleCard>年综合产值变化曲线</titleCard>
<titleCard>政策支持</titleCard>
<div class="zc-wrap">
<vue-seamless-scroll :data="sfList" :class-option="classOption">
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.title }}</span>
<template v-if="showScroll">
<vue-seamless-scroll :data="sfList" :class-option="classOption">
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.policyName }}</span>
</div>
<div class="time">
{{ item.policyTime }}
</div>
</div>
<div class="time">
{{ item.time }}
</vue-seamless-scroll>
</template>
<template v-else>
<template v-if="sfList.length == 1">
<div class="item" v-for="(item, index) in sfList" :key="'sf' + index">
<div class="item-left">
<img src="../../../../public/images/sf-title.png" alt="">
<span>{{ item.policyName }}</span>
</div>
<div class="time">
{{ item.policyTime }}
</div>
</div>
</div>
</vue-seamless-scroll>
</template>
<template v-else>
<div style="width: 100%;text-align: center;">
暂无数据
</div>
</template>
</template>
</div>
</div>
</template>
<script>
import { industrialPlanPolicy } from '../../../api/cygh'
export default {
data() {
return {
//
sfList: [
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
},
{
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}, {
title: '示范项目名称',
time: '2023-05-20'
}
// {
// title: '',
// time: '2023-05-20'
// },
// {
// title: '',
// time: '2023-05-20'
// },
// {
// title: '',
// time: '2023-05-20'
// },
// {
// title: '',
// time: '2023-05-20'
// },
// {
// title: '',
// time: '2023-05-20'
// }, {
// title: '',
// time: '2023-05-20'
// }, {
// title: '',
// time: '2023-05-20'
// }
],
showScroll: false
}
},
computed: {
@ -65,10 +88,26 @@ export default {
};
},
},
created() {
industrialPlanPolicy().then(res => {
this.sfList = []
if (res.code == 200) {
this.sfList = res.data
if (this.sfList.length > 1) {
this.showScroll = true
} else {
this.showScroll = false
}
console.log(this.sfList)
}
})
},
}
</script>
<style></style>
<style lang="less" scoped>
.zczc-wrap {
border: 0.01px solid red;
.zc-wrap {
height: 232px;
overflow: hidden;
@ -89,5 +128,7 @@ export default {
}
}
}
}
</style>

@ -5,6 +5,17 @@
position: absolute;
right: 20px;
top: 15px;"> -->
<div class="space">
<!-- <div class="spaceFb">
<el-checkbox-group v-model="checkValue">
<el-checkbox label="示范基地"></el-checkbox>
<el-checkbox label="富硒地区"></el-checkbox>
</el-checkbox-group>
</div> -->
</div>
<div class="bg-map">
</div>
<div id="map"></div>
<div class="leftInfo-wrap">
<baseNew />
@ -21,7 +32,7 @@
</template>
<script>
import nationWide from '../../utils/nationWide.js';
import baseNew from './components/base.vue'
import baseNew from './components/base'
import fxcy from './components/fxcy.vue'
import sfxm from './components/sfxm.vue'
import fxzt from './components/fxzt.vue'
@ -40,6 +51,7 @@ export default {
},
data() {
return {
checkValue: [],
isreturn: false, //
mapChart: null, //
mapOption: null,//
@ -220,6 +232,8 @@ export default {
height: 100%;
position: relative;
overflow: auto;
.space {}
#map {
width: 100%;

@ -22,6 +22,7 @@ export default {
}
</script>
<style lang="less" scoped>
.dialog /deep/.el-dialog__wrapper {
position: absolute !important;
height: 100%;
@ -42,7 +43,9 @@ export default {
margin: 0;
margin-top: 0 !important;
}
.dialog /deep/ .el-dialog__body{
padding: 15px;
}
.dialog /deep/ .el-dialog--center .el-dialog__body {
padding: 10px;
height: calc(100% - 1.25rem - 0.625rem);
@ -51,4 +54,10 @@ export default {
.dialog /deep/.v-modal {
position: absolute !important;
}
.dialog /deep/ .el-dialog__headerbtn{
position: absolute;
z-index: 100;
font-size: 25px;
}
</style>

@ -1,16 +1,53 @@
<template>
<div style="height: 100%;">
<img src="../../../../public/images/cdsjd.png" alt="" style="width: 100%;height: 80%;">
<div class="footer" style="height: 20%;">
吃的三个阶段
<div class="card-wrap">
<img :src="srcPre + content.picPath" alt="" class="imgs">
<div class="footer">
{{ content.picTitle }}
</div>
</div>
</template>
<script>
export default {
props: {
content: {
type: Object,
default: function () {
return {
picTitle: '',
picPath: ''
}
}
}
},
data() {
return {
srcPre: ''
}
},
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
}
}
</script>
<style lang="less" scoped>
.card-wrap {
width: 100%;
height: 400px;
margin: auto;
background-image: url('../../../../public/images/close.png');
background-size: 100% 100%;
position: relative;
bottom: 30px;
}
.imgs {
width: 100%;
height: 400px;
}
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;

@ -1,20 +1,57 @@
<template>
<div style="height: 100%;">
<img src="../../../../public/images/jufalj.png" alt="" style="width: 100%;height: 80%;">
<div class="footer" style="height: 20%;">
解决方案路径
<div class="card-wrap">
<img :src="srcPre + content.picPath" alt="" class="imgs">
<div class="footer">
{{ content.picTitle }}
</div>
</div>
</template>
<script>
export default {
props: {
content: {
type: Object,
default: function () {
return {
picTitle: '',
picPath: ''
}
}
}
},
data() {
return {
srcPre: ''
}
},
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
}
}
</script>
<style lang="less" scoped>
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;
color: #ECF4F9;
.card-wrap {
width: 100%;
height: 400px;
margin: auto;
background-image: url('../../../../public/images/close.png');
background-size: 100% 100%;
position: relative;
bottom: 30px;
}
.imgs {
width: 100%;
height: 400px;
}
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;
color: #ECF4F9;
}
</style>

@ -1,16 +1,54 @@
<template>
<div style="height: 100%;">
<img src="../../../../public/images/3.png" alt="" style="width: 100%;height: 80%;">
<div class="footer" style="height: 20%;">
农业三阶段
<div class="card-wrap">
<img src="../../../../public/images/3.png" alt="" class="imgs">
<div class="footer">
{{ content.picTitle }}
</div>
</div>
</template>
<script>
export default {
props: {
content: {
type: Object,
default: function () {
return {
picTitle: '',
picPath: ''
}
}
}
},
data() {
return {
srcPre: ''
}
},
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
}
}
</script>
<style lang="less" scoped>
.card-wrap {
width: 100%;
height: 400px;
margin: auto;
background-image: url('../../../../public/images/close.png');
background-size: 100% 100%;
position: relative;
bottom: 30px;
}
.imgs {
width: 100%;
height: 400px;
}
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;

@ -1,26 +1,53 @@
<template>
<div style="height: 100%;">
<video src="https://tv.sohu.com/v/dXMvMzM4OTE0MDkyLzUwMjYyODM4Ni5zaHRtbA.html"
controls="controls" style="width: 100%;height: 80%;">
<div class="card-wrap">
<video src="../../../assets/vedio/nyjs.mp4" autoplay controls="controls" style="width: 100%;" class="vedio">
</video>
<div class="footer" style="height: 20%;">
功能农业(Functional Agriculture)
是由中国科学院赵其国院士在2008年首次提出其定义是:在天然富含有益成分的土壤生境中生长或通过生物营养强化技术及其他生物技术培育实现农副产品中一种或多种有益健康成分(如矿物质生物化合物)
基于人类健康需求做出标准化优化的生产实践
{{ content.contentDetails }}
</div>
</div>
</template>
<script>
export default {
props: {
content: {
type: Object,
default: function () {
return {
videoPath: '',
contentDetails: ''
}
}
}
},
data() {
return {}
return {
srcPre: ''
}
},
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
}
}
</script>
<style lang="less" scoped>
.card-wrap {
width: 100%;
// height: 370px;
margin: auto;
// background-image: url('../../../../public/images/close.png');
background-size: 100% 100%;
position: relative;
bottom: 30px;
overflow: hidden;
}
.vedio{
height: 370px;
object-fit: fill; //
}
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;

@ -1,20 +1,57 @@
<template>
<div style="height: 100%;">
<img src="../../../../public/images/yyqh.png" alt="" style="width: 100%;height: 80%;">
<div class="footer" style="height: 20%;">
营养强化技术路线图
<div class="card-wrap">
<img :src="srcPre + content.picPath" alt="" class="imgs">
<div class="footer">
{{ content.picTitle }}
</div>
</div>
</template>
<script>
export default {
props: {
content: {
type: Object,
default: function () {
return {
picTitle: '',
picPath: ''
}
}
}
},
data() {
return {
srcPre: ''
}
},
created() {
this.srcPre = process.env.VUE_APP_PATH_PRE
}
}
</script>
<style lang="less" scoped>
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;
color: #ECF4F9;
.card-wrap {
width: 100%;
height: 400px;
margin: auto;
background-image: url('../../../../public/images/close.png');
background-size: 100% 100%;
position: relative;
bottom: 30px;
}
.imgs {
width: 100%;
height: 400px;
}
.footer {
padding-top: 20px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;
color: #ECF4F9;
}
</style>

@ -1,53 +1,55 @@
<template>
<div class="home-wrap">
<video src="../../assets/vedio/home.mp4" muted autoplay loop class="vedio"></video>
<div class="topMenu">
<div class="content" v-for="item in topmenuList" :key="item.indxe" @click="handleTopMenu(item.index)">
<span :class="{ activeTitle: activeIndex == item.index }" class="title">{{ item.title }}</span>
<div class="imgWrap">
<img :src="activeIndex == item.index ? item.srcHover : item.src" alt=""
style="width: 100%;height: 100%;" />
</div>
<div class="content" v-for="item in topmenuList" :key="item.index" @click="handleTopMenu(item.index)">
<span :class="{ activeIndex: activeIndex == item.index }" class="title">{{ item.picTitle }}</span>
<img :src="activeIndex == item.index ? item.srcHover : item.src" alt=""
style="width: 100%;height: 100%;" />
</div>
</div>
<div class="menu">
<div class="title">让农产品进入功能时代</div>
<div class="leftMenu">
<div class="leftItem" v-for="item in menuLeftList " :key="item.index" :class="{ left: item.index != 1 }"
@click="hendleMenu(item.index, item.router)">
@click="hendleMenu(item.index, item.router)" @mouseover="mouseover(item.index)"
@mouseleave="mouseleave">
<img :src="menuActive == item.index ? item.mwnusrcHover : item.mwnusrc" alt=""
style="width: 100%;height: 100%;">
<span>
<span :style="menuActive == item.index ? 'color:#FBC923' : 'color:#fff'">
{{ item.title }}
</span>
</div>
</div>
<div class="rightMenu">
<div class="rightItem" v-for=" item in menuRightList " :key="item.index"
:class="{ right: item.index != 4 }" @click="hendleMenu(item.index, item.router)">
:class="{ right: item.index != 4 }" @click="hendleMenu(item.index, item.router)"
@mouseover="mouseover(item.index)" @mouseleave="mouseleave">
<img :src="menuActive == item.index ? item.mwnusrcHoverR : item.mwnusrcR" alt=""
style="width: 100%;height: 100%;">
<span>
<span :style="menuActive == item.index ? 'color:#FBC923' : 'color:#fff'">
{{ item.title }}
</span>
</div>
</div>
<div class="topmenuDialog" v-if="showDialog">
<cardDialog :showDialog=showDialog>
<cardDialog :showDialog="showDialog">
<div style="height: 100%;">
<template v-if="activeIndex == 0">
<vedio />
<vedio :content="topmenuList[0]" />
</template>
<template v-if="activeIndex == 1">
<three />
<three :content="topmenuList[1]" />
</template>
<template v-if="activeIndex == 2">
<jufalj />
<jufalj :content="topmenuList[2]" />
</template>
<template v-if="activeIndex == 3">
<cdsjd />
<cdsjd :content="topmenuList[3]" />
</template>
<template v-if="activeIndex == 4">
<yyqh />
<yyqh :content="topmenuList[4]" />
</template>
</div>
</cardDialog>
@ -57,18 +59,19 @@
</div>
</template>
<script>
const src = require("../../../public/images/jsHover.png");
const srcHover = require("../../../public/images/js.png");
const src = require("../../../public/images/blue.png");
const srcHover = require("../../../public/images/yellow.png");
const mwnusrc = require("../../../public/images/menuleft.png");
const mwnusrcHover = require("../../../public/images/menuleft-active.png");
const mwnusrcR = require('../../../public/images/menuright.png')
const mwnusrcHoverR = require('../../../public/images/menuright-active.png')
import cardDialog from './component/cardDialog.vue'
import cardDialog from './component/cardDialog'
import vedio from './component/vedio'
import three from './component/three'
import jufalj from './component/jufalj'
import cdsjd from './component/cdsjd'
import yyqh from './component/yyqh'
import { getBaseInfo } from '../../api/home/index'
export default {
components: {
cardDialog,
@ -80,39 +83,39 @@ export default {
},
data() {
return {
activeIndex: 0,
activeIndex: 100,
menuActive: null,
topmenuList: [
{
title: "功能农业介绍",
src,
srcHover,
index: 0,
},
{
title: "农业三阶段",
src,
srcHover,
index: 1,
},
{
title: "解决方案路径",
src,
srcHover,
index: 2,
},
{
title: "吃的三个阶段",
src,
srcHover,
index: 3,
},
{
title: "营养强化技术路线图",
src,
srcHover,
index: 4,
},
// {
// title: "",
// src,
// srcHover,
// index: 0,
// },
// {
// title: "",
// src,
// srcHover,
// index: 1,
// },
// {
// title: "",
// src,
// srcHover,
// index: 2,
// },
// {
// title: "",
// src,
// srcHover,
// index: 3,
// },
// {
// title: "线",
// src,
// srcHover,
// index: 4,
// },
],
menuLeftList: [
{
@ -160,18 +163,50 @@ export default {
router: 'sjzx'
},
],
showDialog: true,
showDialog: false,
};
},
created() {
this.$store.commit('SET_ROUTERINFO', this.$route.meta)
this.init()
},
methods: {
init() {
getBaseInfo().then(res => {
if (res.code == 200) {
res.data.contentInfos[0].picTitle = res.data.contentInfos[0].contentTitle
// res.data.contentInfos[0].path = res.data.contentInfos[0].contentTitleth
this.topmenuList = [
...res.data.contentInfos,
...res.data.picInfos
]
this.topmenuList.forEach((item, index) => {
item.src = src
item.srcHover = srcHover
item.index = index
})
this.topmenuList[0].videoPath = res.data.videoInfos[0].videoPath
console.log(111, this.topmenuList)
}
})
},
handleTopMenu(index) {
this.activeIndex = index
this.showDialog = true
},
mouseover(index) {
console.log(index)
this.menuActive = index
},
mouseleave() {
console.log("离开")
this.menuActive = 100
},
hendleMenu(index, router) {
if (index == 5) {
window.open('http://172.18.103.248:80/')
return
}
this.menuActive = index
this.$router.push({ name: router })
@ -183,46 +218,75 @@ export default {
.home-wrap {
height: 100%;
padding: 20px 10px;
font-size: 24px;
font-family: YouSheBiaoTiHei;
color: #FFFFFF;
background-image: url('../../../public/images/home-bg.png');
background-size: 80% 50%;
background-repeat: no-repeat;
background-position: 50% 60%;
// position: relative;
// z-index: 150;
.vedio {
position: absolute;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
object-fit: fill; //
}
.topMenu {
display: flex;
justify-content: space-around;
.content {
width: 200px;
height: 16vh;
width: 175px;
height: 14vh;
text-align: center;
display: inline-block;
position: relative;
.title {
padding: 2vh 0;
display: inline-block;
font-size: 18px;
}
.activeTitle {
.activeIndex {
color: #FBC923;
}
.imgWrap {
width: 100%;
height: 100%;
/* 定义旋转动画 */
@keyframes rotate {
0% {
transform: rotateY(0deg);
}
/* 初始状态为不旋转 */
100% {
transform: rotateY(360deg);
}
/* 结束状态为完全旋转一周360度*/
}
img {
width: 80%;
// height: 100%;
position: absolute;
left: 0;
bottom: 0;
background-image: url(../../../public/images/cy.png);
background-size: 60%;
background-repeat: no-repeat;
background-position: 50%;
// opacity: 0.8;
// animation-name: rotate; /* */
// animation-duration: 2s; /* */
// animation-iteration-count: infinite; /* */
// animation-timing-function: linear; /* 线 */
}
}
@ -239,6 +303,21 @@ export default {
display: flex;
justify-content: space-between;
position: relative;
// border: 1px solid red;
.title {
position: absolute;
left: 760px;
top: 10vh;
font-size: 2vw;
font-style: italic;
color: #fff;
background: linear-gradient(180deg, #ffffff 0%, #63b3ff 100%);
font-weight: 700;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin: 5.185vh 0 3.704vh 0;
}
.leftMenu {
.leftItem {
@ -260,6 +339,8 @@ export default {
.leftItem:hover {
cursor: pointer;
// background-image: url('../../../public/images/menuleft-active.png');
background-size: 100% 100%;
}
}
@ -289,7 +370,7 @@ export default {
.topmenuDialog {
width: 40%;
height: 100%;
height: 51vh;
position: absolute;
left: 30%;
@ -298,5 +379,4 @@ export default {
}
}
</style>
}</style>

@ -22,8 +22,18 @@ export default {
</script>
<style lang="less" scoped>
.layout-wrap {
height: 100%;
background-image: url('../../../public//images/nav.jpg');
height: 100vh;
position: relative;
// width: 100vw;
// height: 1080px;
// left: 0;
// top: 0;
background-image: url('../../../public/images/map.png');
background-size: 100%;
// overflow: hidden;
// background-image: url('../../../public//images/nav.jpg');
.content {
height: calc(100% - 85px);

@ -1,60 +1,63 @@
<template>
<div class="main">
<div class="title">功能农业大数据平台</div>
<div class="loginContainer">
<div class="loginBox">
<div class="topZS"></div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="账号密码登录" name="first">
<el-form class="loginForm">
<el-form-item class="user">
<img src="../../assets/login/password.png" />
<el-input class="eInput" v-model="ruleForm.username" placeholder="请输入用户名" />
<div class="login-wrap">
<video src="../../assets/vedio/login.mp4" muted autoplay loop class="vedio"></video>
<div class="login-content">
<div class="content">
<div class="title">功能农业大数据平台</div>
<el-form class="loginForm">
<el-row>
<el-col>
<el-form-item>
<el-input v-model="ruleForm.username" placeholder="请输入用户名">
<template #prefix>
<div class="prefix"> <img src="../../assets/login/password.png" /></div>
</template>
</el-input>
</el-form-item>
<br />
<el-form-item class="user">
<img src="../../assets/login/user.png" />
<el-input class="eInput" type="password" v-model="ruleForm.password" autocomplete="off"
placeholder="请输入密码" />
</el-col>
<el-col>
<el-form-item>
<el-input type="password" v-model="ruleForm.password" autocomplete="off" show-password
placeholder="请输入密码">
<template #prefix>
<div class="prefix"> <img src="../../assets/login/user.png" /></div>
</template>
</el-input>
</el-form-item>
<el-form-item class="userKey">
<div class="userKeybox">
<img src="../../assets/login/code01.png" />
<el-input class="keyInput" v-model="ruleForm.checkcode" placeholder="请输入验证码" />
</div>
<div ref="img" @click="getCode()" class="codeimgBox">
<img :src="pic" class="yanzheng" />
</el-col>
<el-col>
<el-form-item>
<div class="codeWrap">
<div class="left">
<el-input v-model="ruleForm.checkcode" placeholder="请输入验证码" class="item">
<template #prefix>
<div class="prefix"> <img src="../../assets/login/code01.png" /></div>
</template>
</el-input>
</div>
<div ref="img" @click="getCode()" class="codeimgBox">
<img :src="pic" style="height: 100%;width: 100%;" />
</div>
</div>
</el-form-item>
</el-col>
<el-col>
<el-form-item class="loginbtn">
<el-button @click="login"></el-button>
</el-form-item>
</el-form>
</el-tab-pane>
<!-- <el-tab-pane label="数字证书登录" name="second">
<div class="shuziZS_box">
<div class="keyBox">
<div class="keyText">请输入电子数字证书</div>
<div class="huanhang"></div>
<div class="keyIcon">
<img src="../assets/login/key.png" />
</div>
</div>
<div class="loginbtn">
<el-button>登录</el-button>
</div>
</div>
</el-tab-pane> -->
</el-tabs>
<div class="bottomZS"></div>
</el-col>
</el-row>
</el-form>
</div>
<div class="title-bottom title">让农产品进入功能时代 !</div>
</div>
</div>
</template>
<script>
// import { getCheckCode } from "@/utils/login";
import { getCheckCode } from "@/utils/login";
export default {
data() {
return {
@ -64,54 +67,53 @@ export default {
};
},
created() {
// this.getCode();
this.getCode();
},
methods: {
// getCode() {
// let random = Math.random();
// getCheckCode({ type: "math", s: random }).then((res) => {
// // console.log(res.data);
// this.pic = "data:image/gif;base64," + res.img;
// this.ruleForm.uuid = res.uuid;
// });
// },
getCode() {
let random = Math.random();
getCheckCode({ type: "math", s: random }).then((res) => {
this.pic = "data:image/gif;base64," + res.img;
this.ruleForm.uuid = res.uuid;
});
},
login() {
this.$router.push({name:'home'})
// if (!this.ruleForm.username) {
// this.$message.error("");
// return;
// }
// if (!this.ruleForm.password) {
// this.$message.error("");
// return;
// }
// if (!this.ruleForm.checkcode) {
// this.$message.error("");
// return;
// }
// const param = {
// username: this.ruleForm.username,
// password: this.ruleForm.password,
// code: this.ruleForm.checkcode,
// uuid: this.ruleForm.uuid,
// };
// this.$store
// .dispatch("Login", param)
// .then((res) => {
// if (res.code === 200) {
// sessionStorage.setItem("activeIndex", "1");
// this.$router.push({
// path: "/home/compositeIndex",
// });
// } else {
// this.$message.error(res.msg);
// return;
// }
// })
// .catch(() => {
// //this.$message.error(err.msg)
// this.getCode();
// });
if (!this.ruleForm.username) {
this.$message.error("请输入用户名");
return;
}
if (!this.ruleForm.password) {
this.$message.error("请输入密码");
return;
}
if (!this.ruleForm.checkcode) {
this.$message.error("请输入验证码");
return;
}
const param = {
username: this.ruleForm.username,
password: this.ruleForm.password,
code: this.ruleForm.checkcode,
uuid: this.ruleForm.uuid,
};
this.$store
.dispatch("Login", param)
.then((res) => {
if (res.code === 200) {
this.$store.dispatch('GetInfo')
this.$router.push({
name: "home",
});
} else {
this.$message.error(res.msg);
return;
}
})
.catch(() => {
//this.$message.error(err.msg)
this.getCode();
});
},
handleClick() { },
},
@ -119,370 +121,127 @@ export default {
</script>
<style lang="less" scoped>
.main {
.login-wrap {
width: 100vw;
height: 100vh;
background: url("../../../public/images/login-bg.png") no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
position: relative;
.title {
.vedio {
height: 100%;
width: 100%;
position: absolute;
top: 10vh;
left: 50%;
transform: translateX(-50%);
font-family: YouSheBiaoTiHei;
font-size: 56px;
color: #59ffda;
letter-spacing: 4.6px;
text-align: justify;
line-height: 57px;
text-shadow: 0 8px 8px rgba(0, 0, 0, 0.3);
font-weight: 400;
left: 0;
top: 0;
object-fit: fill; //
z-index: 10;
}
.loginContainer {
width: 95%;
height: 95%;
// background: url("~@/assets/login/loginback02.png") no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
.loginBox {
width: 790px;
height: 540px;
background: url("~@/assets/login/loginback03.png") no-repeat;
.login-content {
position: absolute;
width: 100%;
height: 60vh;
z-index: 100;
margin-top: 20vh;
.content {
margin: 0 auto;
width: 600px;
height: 48vh;
background-image: url('../../../public/images/login-bg-b272110d.png');
background-size: 100% 100%;
position: relative;
.topZS {
position: absolute;
width: 100%;
height: 30px;
top: 0;
left: 0;
background: url("~@/assets/login/loginback04.png") no-repeat;
background-size: 100% 100%;
}
box-sizing: border-box;
padding: 0 60px;
overflow: hidden;
.title {
text-align: center;
font-size: 1.875vw;
font-style: italic;
color: #fff;
background: linear-gradient(180deg, #ffffff 0%, #63b3ff 100%);
font-weight: 700;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin: 5.185vh 0 3.704vh 0;
.buttonBox {
width: 700px;
height: 74px;
background-image: linear-gradient(90deg,
rgba(238, 238, 238, 0) 0%,
rgba(53, 206, 150, 0.4) 50%,
rgba(216, 216, 216, 0) 100%);
}
.bottomZS {
position: absolute;
.loginForm {
width: 100%;
height: 30px;
bottom: 0;
left: 0;
background: url("~@/assets/login/loginback04.png") no-repeat;
background-size: 100% 100%;
transform: rotateX(180deg);
}
/deep/.el-tabs {
width: 790px;
height: 540px;
padding: 30px 45px;
box-sizing: border-box;
.el-tabs__header {
width: 700px;
height: 72px;
background-image: linear-gradient(90deg,
rgba(238, 238, 238, 0) 0%,
rgba(53, 206, 150, 0.4) 50%,
rgba(216, 216, 216, 0) 100%);
.el-tabs__nav-wrap {
height: 72px;
border: 0;
.el-tabs__nav-scroll {
height: 72px;
.el-tabs__nav {
height: 72px;
width: 100%;
.el-tabs__active-bar {
background: #32ff9f;
width: 50% !important;
}
.el-tabs__item {
height: 72px;
width: 50%;
line-height: 72px;
text-align: center;
font-family: AlimamaShuHeiTi;
font-size: 30px;
color: #edfaff;
letter-spacing: 2.86px;
font-weight: 700;
}
.codeWrap {
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
.is-active {
color: #32ff9a;
}
}
}
.left {
width: 78%;
}
.el-tabs__nav-wrap::after {
display: none;
.codeimgBox {
width: 20;
height: 4vh;
}
}
.el-tabs__content {
width: 700px;
height: calc(100% - 87px);
.loginbtn {
width: 100%;
height: 4vh;
margin-top: 3vh;
background: url("../../../public/images/login-button.png") no-repeat;
background-size: 100% 100%;
.loginForm {
button {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
flex-wrap: wrap;
}
.shuziZS_box {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
flex-wrap: wrap;
.keyBox {
width: 600px;
height: 182px;
background: rgba(8, 44, 47, 0.81);
border: 1px solid rgba(38, 170, 123, 1);
border-radius: 3px;
margin-top: 40px;
display: flex;
flex-wrap: wrap;
justify-content: center;
.keyText {
margin-top: 30px;
width: 100%;
height: 33px;
text-align: center;
line-height: 33px;
opacity: 0.8;
font-family: PingFangSC-Regular;
font-size: 24px;
color: #ffffff;
letter-spacing: 2px;
font-weight: 400;
}
.huanhang {
width: 100%;
height: 1px;
}
.keyIcon {
margin-top: -40px;
width: 50px;
height: 50px;
background: #f14141;
box-shadow: 0px 0px 8px 1px rgba(188, 37, 37, 0.76);
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
img {
width: 17px;
height: 31px;
}
}
}
}
.user {
width: 600px;
height: 66px;
background: rgba(8, 44, 47, 0.81);
border: 1px solid rgba(38, 170, 123, 1);
border-radius: 3px;
display: flex;
margin-top: 15px;
.el-form-item__content {
display: flex !important;
align-items: center;
}
img {
margin-left: 10px;
width: 24px;
height: 26px;
}
.eInput {
display: inline-block;
width: 550px;
height: 66px;
background: rgba(0, 0, 0, 0);
color: #cfe9ff;
font-size: 19px;
padding-left: 10px;
border: 0;
letter-spacing: 1.65px;
font-weight: 400;
.el-input__inner {
height: 65px;
line-height: 65px;
background: rgba(0, 0, 0, 0);
border: 0;
color: #eeeeee;
}
}
.keyInput {
height: 65px;
width: 321px;
background-color: rgba(0, 0, 0, 0.05);
opacity: 0.5;
color: #cfe9ff;
font-size: 19px;
padding-left: 10px;
border: 0;
letter-spacing: 1.65px;
font-weight: 400;
}
}
.user:hover {
background: rgba(8, 44, 47, 0.81);
border: 1px solid rgba(79, 255, 141, 1);
border-radius: 3px;
height: 4vh;
border: 0;
font-size: 18px;
color: #edfaff;
letter-spacing: 8px;
font-weight: 500;
background-color: rgba(0, 0, 0, 0);
}
}
.userKey {
width: 600px;
height: 66px;
display: flex;
margin-top: 15px;
.el-form-item__content {
display: flex !important;
align-items: center;
}
.userKeybox {
width: 475px;
height: 65px;
background: rgba(8, 44, 47, 0.81);
border: 1px solid rgba(38, 170, 123, 1);
border-radius: 3px;
display: flex;
align-items: center;
img {
margin-left: 10px;
width: 24px;
height: 26px;
}
.keyInput {
height: 65px;
width: 321px;
background-color: rgba(0, 0, 0, 0);
color: #cfe9ff;
font-size: 19px;
padding-left: 10px;
border: 0;
letter-spacing: 1.65px;
font-weight: 400;
.el-input__inner {
height: 65px;
line-height: 65px;
background: rgba(0, 0, 0, 0);
border: 0;
color: #eeeeee;
}
}
.keyInput {
height: 65px;
width: 321px;
background-color: rgba(0, 0, 0, 0.05);
opacity: 0.5;
color: #cfe9ff;
font-size: 19px;
padding-left: 10px;
border: 0;
letter-spacing: 1.65px;
font-weight: 400;
}
}
}
/deep/ .el-input__inner {
background: none;
border: 1px solid #0080fe;
color: #fff;
.userKeybox:hover {
background: rgba(8, 44, 47, 0.81);
border: 1px solid rgba(79, 255, 141, 1);
border-radius: 3px;
}
}
.codeimgBox {
width: 123px;
height: 66px;
/deep/ .el-input__inner:hover {
border: 1px solid rgb(119, 194, 251);
}
.yanzheng {
width: 123px;
height: 66px;
/deep/ .el-input__prefix .prefix {
width: 15px;
}
background-image: linear-gradient(90deg,
#0a2340 0%,
rgba(18, 64, 105, 0.04) 100%);
border-image: linear-gradient(to right, #124169, #7bf3fc) 1 1;
}
}
}
/deep/ .el-input__prefix img {
width: 15px;
margin-top: 1vh;
}
.loginbtn {
width: 600px;
height: 66px;
margin-top: 15px;
background: url("~@/assets/login/loginbackbtn.png") no-repeat;
background-size: 100% 100%;
button {
width: 600px;
height: 66px;
border: 0;
font-size: 20px;
color: #edfaff;
letter-spacing: 6px;
font-weight: 500;
background-color: rgba(0, 0, 0, 0);
}
}
}
.loginbtn:hover {
background: url("~@/assets/login/loginbackbtn02.png") no-repeat;
background-size: 100% 100%;
}
}
}
.title-bottom {
height: 12vh;
line-height: 12vh;
width: 100%;
text-align: center;
font-size: 2vw;
font-style: italic;
color: #fff;
background: linear-gradient(180deg, #ffffff 0%, #63b3ff 100%);
font-weight: 700;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
}

@ -8,6 +8,8 @@
</div>
</template>
<script>
import { productOutput } from '../../../api/scgl'
export default {
data() {
return {
@ -17,9 +19,17 @@ export default {
}
},
mounted() {
var xAxisData = ['富硒禽类', '富硒茶', '富硒水稻', '富硒魔芋']
var seriesData = [60, 120, 85, 95]
this.$refs.cpcl.getInitEcharts(xAxisData, seriesData)
productOutput().then(res => {
var xAxisData = res.data.map(item => {
return item.productName
})
var seriesData = res.data.map(item => {
return item.productQuantity
})
this.$refs.cpcl.option.grid.left = 10+"%"
this.$refs.cpcl.getInitEcharts(xAxisData, seriesData)
})
},
methods: {

@ -8,6 +8,8 @@
</div>
</template>
<script>
import { agriculturalBaseArea } from '../../../api/scgl'
export default {
data() {
return {
@ -56,18 +58,18 @@ export default {
},
methods: {
getXhptrEchart() {
var chartDom = document.getElementById('gdmj');
var myChart = this.$echarts.init(chartDom);
this.option.series[0].data = [
{ value: 1048, name: '镇平县' },
{ value: 735, name: '紫阳县' },
{ value: 580, name: '旬阳县' },
{ value: 484, name: '白河县' },
{ value: 300, name: '汉阴县' },
{ value: 200, name: '宁陕县' },
{ value: 200, name: '石泉县' }
],
agriculturalBaseArea().then(res => {
var chartDom = document.getElementById('gdmj');
var myChart = this.$echarts.init(chartDom);
this.option.series[0].data = res.data.map(item => {
return {
value: item.baseArea,
name: item.cityName
}
})
this.option && myChart.setOption(this.option);
})
},
}
}

@ -27,9 +27,7 @@ export default {
},
},
mounted() {
// this.$nextTick(() => {
this.initOption();
// });
window.addEventListener("resize", this.initOption);
},
destroyed() {
@ -42,7 +40,7 @@ export default {
quantity += item.y;
});
this.dataList.forEach((item) => {
item.bfb = parseInt((item.y / quantity) * 100);
item.bfb = parseInt((item.y / quantity) * 10);
item.h = item.bfb * 1.5 >= 70 ? 70 : item.bfb * 1.5
// item.h = parseInt(0.86 * item.bfb); // 60
// console.log(this.dataList, "dataList----->>>");

@ -0,0 +1,42 @@
<template>
<div class="nySuggest">
<titleCard>农事建议
</titleCard>
<div class="content">
{{ nySuggest }}
</div>
</div>
</template>
<script>
import { agriculturalAdvice } from '../../../api/scgl'
export default {
data() {
return {
nySuggest: ""
}
},
created() {
agriculturalAdvice().then(res => {
if (res.code == 200) {
this.nySuggest = res.data[0].farmingOpinionContent
}
})
},
methods: {
}
}
</script>
<style lang="less" scoped>
.nySuggest {
height: 200px;
font-size: 14px;
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: 400;
color: #ECF4F9;
overflow: scroll;
}
</style>

@ -1,13 +1,37 @@
<template>
<div class="weatherWarning-wrap">
<!-- <titleCard>气象预警
<titleCard>气象预警
</titleCard>
<div class="weatherWarning">
<div id="he-plugin-standard"></div>
</div> -->
</div>
</div>
</template>
<script>
// import axios from 'axios';
// class WeatherService {
// getCurrentCity() {
// return new Promise((resolve, reject) => {
// // API
// axios.get('https://api.ipify.org/?format=json')
// .then(response => {
// const ip = response.data.ip;
// // IP
// axios.get(`http://api.weatherapi.com/v1/current.json?key="4c118e3ce0c443058596d203de2c2123"&q=${ip}`)
// .then(response => {
// resolve(response.data);
// })
// .catch(error => {
// reject(error);
// });
// })
// .catch(error => {
// reject(error);
// });
// });
// }
// }
export default {
data() {
return {
@ -15,37 +39,47 @@ export default {
}
},
mounted() {
// window.WIDGET = {
// "CONFIG": {
// "layout": "1",
// "width": "380",
// "height": "170",
// "background": "1",
// "dataColor": "FFFFFF",
// "key": "1de7abeb93a349e2a17630cf07692202"
// }
// }
// let script = document.createElement('script')
// window.WIDGET = {
// CONFIG: {
// layout: "1",
// width: "380",
// height: "170",
// background: "1",
// dataColor: "FFFFFF",
// city: "CN101130101",
// key: "1de7abeb93a349e2a17630cf07692202" //key
// }
// };
// let script = document.createElement('script');
// script.type = 'text/javascript';
// script.src = 'https://widget.qweather.net/standard/static/js/he-standard-common.js?v=2.0';
// document.getElementsByTagName('body')[0].appendChild(script);
window.WIDGET = {
"CONFIG": {
"layout": "21",
"width": "380",
"height": "170",
"background": "1",
"dataColor": "FFFFFF",
"key": "4c118e3ce0c443058596d203de2c2123",
},
methods: {
// city: 'CN101230101'
}
}
var scripts = document.createElement('script')
scripts.type = 'text/javascript';
scripts.src = 'https://widget.qweather.net/standard/static/js/he-standard-common.js?v=2.0';
document.getElementsByTagName('body')[0].appendChild(scripts);
// this.$nextTick(() => {
// const weatherService = new WeatherService();
// weatherService.getCurrentCity()
// .then(result => {
// console.log(result);
// //
// if (result && result.location && result.location.name) {
// this.city = result.location.name;
// console.log(999, result.location.name)
// } else {
// this.city = "";
// }
// })
// .catch(error => {
// console.error("Error:", error);
// this.city = "API";
// });
// });
}
}
</script>
<style lang="less" scoped>

@ -10,49 +10,66 @@
</template>
<script>
import highChartsPie from './highChartsPie.vue'
import { IoTDevices } from '../../../api/scgl'
export default {
components: {
highChartsPie
},
data() {
return {
dataList: [{
name: "红草莓",
y: 10254,
h: 0,
bfb: 0
},
{
name: "白草莓",
y: 6894,
h: 0,
bfb: 0
},
{
name: "红颜草莓",
y: 7667,
h: 0,
bfb: 0
},
{
name: "甜宝草莓",
y: 4287,
h: 0,
bfb: 0
},
{
name: "红颜草莓",
y: 8687,
h: 0,
bfb: 0
},
{
name: "甜宝草莓",
y: 16112,
h: 0,
bfb: 0
}]
dataList: [
// {
// name: "",
// y: 10254,
// h: 0,
// bfb: 0
// },
// {
// name: "",
// y: 6894,
// h: 0,
// bfb: 0
// },
// {
// name: "",
// y: 7667,
// h: 0,
// bfb: 0
// },
// {
// name: "",
// y: 4287,
// h: 0,
// bfb: 0
// },
// {
// name: "",
// y: 8687,
// h: 0,
// bfb: 0
// },
// {
// name: "",
// y: 16112,
// h: 0,
// bfb: 0
// }
]
}
},
created() {
IoTDevices().then(res => {
if (res.code == 200) {
this.dataList = res.data.map(item => {
return {
name: item.deviceName,
y: item.deviceQuantity*1,
h: 0,
bfb: 0
}
})
}
})
}
}
</script>

@ -19,7 +19,9 @@ export default {
mounted() {
var xAxisData = ['旬阳县', '镇坪县', '紫阳县', '汉阴县', '石泉县', '宁陕县']
var seriesData = [60, 120, 105, 500, 400, 200]
this.$refs.wlwsbsl.option.grid.left = 10+"%"
this.$refs.wlwsbsl.getInitEcharts(xAxisData, seriesData)
},
methods: {

@ -8,6 +8,7 @@
</div>
</template>
<script>
import { consumables } from '../../../api/scgl'
export default {
data() {
return {
@ -56,17 +57,17 @@ export default {
},
methods: {
getXhptrEchart() {
var chartDom = document.getElementById('xhptr');
var myChart = this.$echarts.init(chartDom);
this.option.series[0].data = [
{ value: 1048, name: '农膜' },
{ value: 735, name: '富硒有机肥' },
{ value: 580, name: '尿素' },
{ value: 484, name: '复合肥' },
{ value: 300, name: '猪饲料' },
{ value: 200, name: '鸡饲料' }
],
this.option && myChart.setOption(this.option);
consumables().then(res => {
if (res.code == 200) {
var chartDom = document.getElementById('xhptr');
var myChart = this.$echarts.init(chartDom);
this.option.series[0].data = res.data.map(item => {
return { value: item.consumablesQuantity, name: item.consumablesName }
})
this.option && myChart.setOption(this.option);
}
})
},
}
}

@ -8,6 +8,7 @@
</div>
</template>
<script>
import { resourceDistribution } from '../../../api/scgl'
export default {
data() {
return {
@ -17,9 +18,17 @@ export default {
}
},
mounted() {
var xAxisData = ['茶叶', '小麦', '水稻', '花生', '玉米', '大豆']
var seriesData = [60, 120, 105, 500, 400, 200]
this.$refs.zyfb.getInitEcharts(xAxisData, seriesData)
resourceDistribution().then(res => {
var xAxisData = res.data.map(item =>{
return item.resourceName
})
var seriesData = res.data.map(item =>{
return item.resourceArea
})
this.$refs.zyfb.option.grid.left = 10+"%"
this.$refs.zyfb.getInitEcharts(xAxisData, seriesData)
})
},
methods: {

@ -16,6 +16,7 @@
<wlwsb id="zhy" />
<wlwsbsl />
<weather-warning></weather-warning>
<nySuggest />
</div>
</div>
</template>
@ -28,6 +29,7 @@ import zyfb from './components/zyfb.vue'
import wlwsb from './components/wlwsb.vue'
import wlwsbsl from './components/wlwsbsl.vue'
import weatherWarning from './components/weatherWarning.vue'
import nySuggest from './components/nySuggest.vue'
export default {
components: {
xhptr,
@ -36,7 +38,8 @@ export default {
zyfb,
wlwsb,
wlwsbsl,
weatherWarning
weatherWarning,
nySuggest
},
data() {
return {

@ -8,6 +8,7 @@
</div>
</template>
<script>
import { researchBranchDistributionBase } from '../../../api/zygk'
export default {
data() {
return {
@ -105,6 +106,7 @@ export default {
},
methods: {
getfwyjEchart() {
researchBranchDistributionBase().then(res =>{})
var chartDom = document.getElementById('fxyj');
var myChart = this.$echarts.init(chartDom);
this.option && myChart.setOption(this.option);

@ -18,10 +18,11 @@
<fwqs />
<fwyj />
<fwfb />
<zlnd />
</div>
<div class="rightInfo-wrap">
<div class="yanjiu">
<div class="left">理论基础</div>
<div class="left">研究态势</div>
<zlnd />
<zlyjfb />
<zlsource />

@ -1,5 +1,6 @@
const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require("path");
const pxtovw = require('postcss-px-to-viewport');
// const px2rem = require("postcss-px2rem");
// 配置基本大小
// const postcss = px2rem({
@ -30,11 +31,32 @@ module.exports = {
},
},
lintOnSave: true,
// css: {
// loaderOptions: {
// postcss: {
// plugins: [postcss],
// },
// },
// },
css: {
loaderOptions: {
sass: {
//给sass-loader传递选项
},
css: {
//给css-loader传递选项
},
postcss: {
//给postcss-loader传递选项
plugins: [
new pxtovw({
unitToConvert: "px", //需要转换的单位,默认为"px"
viewportWidth: 1920, //设计稿的视口宽度
unitPrecision: 5, //单位转换后保留的小数位数
propList: ["*"], //要进行转换的属性列表,*表示匹配所有,!表示不转换
viewportUnit: "vw", //转换后的视口单位
fontViewportUnit: "vw", //转换后字体使用的视口单位
selectorBlackList: [], //不进行转换的css选择器继续使用原有单位
minPixelValue: 1, //设置最小的转换数值
mediaQuery: false, //设置媒体查询里的单位是否需要转换单位
replace: true, //是否直接更换属性值,而不添加备用属性
exclude: [/node_modules/], //忽略某些文件夹下的文件
}),
],
},
},
},
};

Loading…
Cancel
Save