feat
This commit is contained in:
parent
3a60b54296
commit
f519ff4737
BIN
src/assets/video.mp4
Normal file
BIN
src/assets/video.mp4
Normal file
Binary file not shown.
@ -2,7 +2,7 @@
|
|||||||
<div ref="chartMap" :style="{ height, width }"></div>
|
<div ref="chartMap" :style="{ height, width }"></div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { ref, reactive, watch, watchEffect } from 'vue';
|
import { ref, reactive, watch, watchEffect, nextTick } from 'vue';
|
||||||
import { cloneDeep } from 'lodash';
|
import { cloneDeep } from 'lodash';
|
||||||
import { useEcharts } from '@/hooks/useEcharts';
|
import { useEcharts } from '@/hooks/useEcharts';
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import * as echarts from 'echarts/core';
|
import * as echarts from 'echarts/core';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
BarChart,
|
BarChart,
|
||||||
LineChart,
|
LineChart,
|
||||||
|
LinesChart,
|
||||||
PieChart,
|
PieChart,
|
||||||
MapChart,
|
MapChart,
|
||||||
PictorialBarChart,
|
PictorialBarChart,
|
||||||
@ -46,6 +46,7 @@ echarts.use([
|
|||||||
ParallelComponent,
|
ParallelComponent,
|
||||||
BarChart,
|
BarChart,
|
||||||
LineChart,
|
LineChart,
|
||||||
|
LinesChart,
|
||||||
PieChart,
|
PieChart,
|
||||||
MapChart,
|
MapChart,
|
||||||
RadarChart,
|
RadarChart,
|
||||||
|
@ -30,6 +30,7 @@ const list = reactive([
|
|||||||
let currentRegion = ref(null);
|
let currentRegion = ref(null);
|
||||||
const doMapclick = (data) => {
|
const doMapclick = (data) => {
|
||||||
currentRegion.value = data;
|
currentRegion.value = data;
|
||||||
|
list.forEach((v) => (v.value = (Math.floor(Math.random() * (6.65 - 2.12 + 1)) + 2.12).toFixed(2)));
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -7,15 +7,15 @@ import * as echarts from 'echarts';
|
|||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [
|
data: [
|
||||||
{ value: 333, value1: 208, name: '耿马镇' },
|
{ value: 103, value1: 208, name: '耿马镇' },
|
||||||
{ value: 222, value1: 157, name: '勐撒镇' },
|
{ value: 72, value1: 157, name: '勐撒镇' },
|
||||||
{ value: 123, value1: 125, name: '勐永镇' },
|
{ value: 50, value1: 125, name: '勐永镇' },
|
||||||
{ value: 156, value1: 146, name: '孟定镇' },
|
{ value: 60, value1: 146, name: '孟定镇' },
|
||||||
{ value: 112, value1: 86, name: '勐简乡' },
|
{ value: 40, value1: 86, name: '勐简乡' },
|
||||||
{ value: 123, value1: 172, name: '贺派乡' },
|
{ value: 111, value1: 172, name: '贺派乡' },
|
||||||
{ value: 121, value1: 180, name: '四排山乡' },
|
{ value: 81, value1: 180, name: '四排山乡' },
|
||||||
{ value: 143, value1: 99, name: '芒洪乡' },
|
{ value: 55, value1: 99, name: '芒洪乡' },
|
||||||
{ value: 123, value1: 84, name: '大兴乡' },
|
{ value: 68, value1: 84, name: '大兴乡' },
|
||||||
],
|
],
|
||||||
option: {
|
option: {
|
||||||
grid: {
|
grid: {
|
||||||
@ -30,6 +30,8 @@ const state = reactive({
|
|||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow',
|
type: 'shadow',
|
||||||
},
|
},
|
||||||
|
backgroundColor: 'rgba(18, 55, 85, 0.8);',
|
||||||
|
borderColor: '#35d0c0',
|
||||||
formatter: (data) => {
|
formatter: (data) => {
|
||||||
console.log('data', data);
|
console.log('data', data);
|
||||||
const params = data[0];
|
const params = data[0];
|
||||||
@ -182,6 +184,7 @@ const state = reactive({
|
|||||||
symbolSize: 8,
|
symbolSize: 8,
|
||||||
smooth: true,
|
smooth: true,
|
||||||
symbol: 'circle',
|
symbol: 'circle',
|
||||||
|
max: 100,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: 'rgba(53,208,192,1)',
|
color: 'rgba(53,208,192,1)',
|
||||||
|
@ -34,6 +34,9 @@ const list = reactive([
|
|||||||
let currentRegion = ref(null);
|
let currentRegion = ref(null);
|
||||||
const doMapclick = (data) => {
|
const doMapclick = (data) => {
|
||||||
currentRegion.value = data;
|
currentRegion.value = data;
|
||||||
|
list.forEach((v) => {
|
||||||
|
v.value = Number(v.value) + 1 * (Math.floor(Math.random() * (6 - 2 + 1)) + 2.12).toFixed(0);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<centerMap :dialog-title="'土地类型'">
|
<centerMap :dialog-title="'土地类型'" @mapclick="doMapclick">
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="land-map-pop-header">
|
<div class="land-map-pop-header">
|
||||||
<div class="title">土地类型</div>
|
<div class="title">土地类型</div>
|
||||||
<div class="value">总:88.5{{ unit }}</div>
|
<div class="value">总:{{ all + unit }}</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #dialogContent>
|
<template #dialogContent>
|
||||||
@ -23,7 +23,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive } from 'vue';
|
import { ref, reactive, computed } from 'vue';
|
||||||
|
|
||||||
const unit = ref('万亩');
|
const unit = ref('万亩');
|
||||||
const list = reactive([
|
const list = reactive([
|
||||||
@ -34,6 +34,18 @@ const list = reactive([
|
|||||||
{ title: '灌溉水田', value: '60.8', color: '#41BDFC' },
|
{ title: '灌溉水田', value: '60.8', color: '#41BDFC' },
|
||||||
{ title: '旱地', value: '60.8', color: '#FC0003' },
|
{ title: '旱地', value: '60.8', color: '#FC0003' },
|
||||||
]);
|
]);
|
||||||
|
function doMapclick() {
|
||||||
|
list.forEach((v) => {
|
||||||
|
v.value = Number(v.value) + 1 * (Math.floor(Math.random() * (6 - 2 + 1)) + 2.12).toFixed(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const all = computed(() => {
|
||||||
|
let n = 0;
|
||||||
|
list.forEach((v) => {
|
||||||
|
n += v.value;
|
||||||
|
});
|
||||||
|
return n;
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -7,24 +7,24 @@ import { reactive } from 'vue';
|
|||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [
|
data: [
|
||||||
{
|
{
|
||||||
name: '茶叶',
|
name: '其他',
|
||||||
value: 12000,
|
value: 3500,
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '核桃',
|
|
||||||
value: 8000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '甘蔗',
|
|
||||||
value: 6000,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '烟叶',
|
name: '烟叶',
|
||||||
value: 4000,
|
value: 4000,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '其他',
|
name: '甘蔗',
|
||||||
value: 3500,
|
value: 6000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '核桃',
|
||||||
|
value: 8000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '茶叶',
|
||||||
|
value: 12000,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
option: {
|
option: {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<vue3ScrollSeamless class="list" :class-options="classOptions" :data-list="list">
|
<vue3ScrollSeamless class="list" :class-options="classOptions" :data-list="list">
|
||||||
<ul class="case-info">
|
<ul class="case-info">
|
||||||
<li v-for="(item, index) in list" :key="index">
|
<li v-for="(item, index) in list" :key="index" @click="handleInfo(item)">
|
||||||
<div>{{ item.productName }}</div>
|
<div>{{ item.productName }}</div>
|
||||||
<div>{{ item.productCode }}</div>
|
<div>{{ item.productCode }}</div>
|
||||||
<div>{{ item.specs }}</div>
|
<div>{{ item.specs }}</div>
|
||||||
@ -19,6 +19,48 @@
|
|||||||
</vue3ScrollSeamless>
|
</vue3ScrollSeamless>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<section class="line_info" :style="{ '--top': info.show ? '18vh' : '140vh' }">
|
||||||
|
<i class="el-icon-close" @click="handleCloseInfo">X</i>
|
||||||
|
<section>
|
||||||
|
<section class="info_box">
|
||||||
|
<div>
|
||||||
|
<span class="_label">产品名称</span>
|
||||||
|
<span>{{ info.productName }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">产品批次号</span>
|
||||||
|
<span>{{ info.productCode }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">产品规格</span>
|
||||||
|
<span>{{ info.specs }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">产品类型</span>
|
||||||
|
<span>{{ info.productType }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">生产厂家</span>
|
||||||
|
<span>{{ info.info && info.info.manufacturer }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">生产时间</span>
|
||||||
|
<span>{{ info.info && info.info.productTime }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="_label">终端零售店</span>
|
||||||
|
<span>{{ info.info && info.info.shop }}</span>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="route_box">
|
||||||
|
<div v-for="(item, i) in info.info && info.info.route" :key="`route_${i}`" class="route_item">
|
||||||
|
<div class="_circle"></div>
|
||||||
|
<div class="_name">{{ item.name }}</div>
|
||||||
|
<div class="_time">{{ item.time }}</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -39,6 +81,15 @@ let list = ref([]);
|
|||||||
const classOptions = {
|
const classOptions = {
|
||||||
singleHeight: 48,
|
singleHeight: 48,
|
||||||
};
|
};
|
||||||
|
const info = ref({
|
||||||
|
show: false,
|
||||||
|
});
|
||||||
|
function handleInfo(item) {
|
||||||
|
info.value = Object.assign({ show: true }, item);
|
||||||
|
}
|
||||||
|
function handleCloseInfo() {
|
||||||
|
info.value = { show: false };
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@ -92,4 +143,102 @@ const classOptions = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.line_info {
|
||||||
|
position: fixed;
|
||||||
|
padding: 32px 10px 20px 20px;
|
||||||
|
left: 30%;
|
||||||
|
top: var(--top);
|
||||||
|
max-height: 74vh;
|
||||||
|
width: 400px;
|
||||||
|
color: #fff;
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
border: 2px solid #01fefd;
|
||||||
|
border-radius: 16px;
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
z-index: 9999;
|
||||||
|
transition: all 0.8s cubic-bezier(0.58, 0.15, 0.4, 1.42);
|
||||||
|
font-size: 18px;
|
||||||
|
._label {
|
||||||
|
color: #01fefd;
|
||||||
|
}
|
||||||
|
.el-icon-close {
|
||||||
|
position: absolute;
|
||||||
|
right: 8px;
|
||||||
|
top: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
> section {
|
||||||
|
padding-right: 10px;
|
||||||
|
max-height: calc(74vh - 100px);
|
||||||
|
overflow-y: auto;
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background-color: #dddddd;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #959191;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: #a0a0a0;
|
||||||
|
}
|
||||||
|
.info_box {
|
||||||
|
> div {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 40% 60%;
|
||||||
|
span {
|
||||||
|
&:last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.route_box {
|
||||||
|
padding: 0 34px;
|
||||||
|
> div {
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 12px;
|
||||||
|
left: -11px;
|
||||||
|
height: 100%;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
&::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
> div {
|
||||||
|
position: relative;
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
._circle {
|
||||||
|
position: absolute;
|
||||||
|
top: 4px;
|
||||||
|
left: -16px;
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0 0 3px #fff;
|
||||||
|
}
|
||||||
|
._name {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-family: '黑体';
|
||||||
|
color: #01fefd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<section class="_container">
|
<section class="_container">
|
||||||
<div class="_left">
|
<div class="_left">
|
||||||
<video src=""></video>
|
<video src="../../../assets/video.mp4" autoplay loop controls></video>
|
||||||
<div class="video_footer">核桃仁原材料</div>
|
<div class="video_footer">核桃仁原材料</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_right">
|
<div class="_right">
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { isEmpty, getAssetsFile } from '@/utils';
|
|
||||||
import { ref, reactive, onMounted, computed } from 'vue';
|
import { ref, reactive, onMounted, computed } from 'vue';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import geoJsonData from './china.json'; // 根据实际情况调整路径;
|
import geoJsonData from './china.json'; // 根据实际情况调整路径;
|
||||||
|
@ -76,13 +76,7 @@ import productTypeCharts from './components/productTypeCharts.vue';
|
|||||||
import traceBarCharts from './components/traceBarCharts.vue';
|
import traceBarCharts from './components/traceBarCharts.vue';
|
||||||
import detectionCharts from './components/detectionCharts.vue';
|
import detectionCharts from './components/detectionCharts.vue';
|
||||||
|
|
||||||
const one = ref([
|
const one = ref([]);
|
||||||
{ value: 12000, name: '耿马镇' },
|
|
||||||
{ value: 8000, name: '勐撒镇' },
|
|
||||||
{ value: 862, name: '勐简乡' },
|
|
||||||
{ value: 6000, name: '勐永镇' },
|
|
||||||
{ value: 4000, name: '孟定镇' },
|
|
||||||
]);
|
|
||||||
|
|
||||||
const handleCommand = (data) => {
|
const handleCommand = (data) => {
|
||||||
// state.queryCode = data.value;
|
// state.queryCode = data.value;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user