周末修改

This commit is contained in:
姚俊旭 2025-06-09 10:59:28 +08:00
parent 6cebfdf962
commit a4ea766895
31 changed files with 551 additions and 225 deletions

View File

@ -27,9 +27,9 @@ export function getGoodDetail(id, params) {
}
// 获取用户评价列表
export function agriculturalContent(params) {
export function agriculturalContent(data = {}) {
return request('goods/goodInfoManage/contentPage', {
method: 'POST',
params,
data,
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -137,7 +137,7 @@ const chartsData = reactive({
trigger: 'item',
formatter: function (params) {
if (params.seriesType === 'effectScatter') {
return `${params.name}: (${params.value[0]}, ${params.value[1]})`;
return `${params.name}`;
}
return params.name;
},

View File

@ -111,7 +111,7 @@ function Search() {
const toHome = () => {
console.info('toHome', router);
router.push('/sub-operation-service/home');
router.push('/sub-operation-service');
};
const toUserCenter = () => {
@ -239,9 +239,9 @@ const toCart = () => {
.search-warp {
position: relative;
padding-left: 36px;
width: 100%;
width: 80%;
.el-input {
width: 100%;
width: 50%;
height: 50px;
font-size: 18px;
flex-grow: 1;
@ -252,7 +252,7 @@ const toCart = () => {
.el-button {
position: absolute;
top: 50%;
right: 8px;
right: 25%;
padding: 0 24px;
height: 42px;
font-size: 18px;

View File

@ -232,10 +232,16 @@ export const constantRoutes = [
children: [
{
path: '/sub-operation-service/ruralFinance/index',
component: () => import('@/views/ruralFinance/index.vue'),
component: () => import('@/views/error/blank.vue'),
name: 'ruralFinanceMain',
meta: { title: '涉农金融首页' },
},
// {
// path: '/sub-operation-service/ruralFinance/index',
// component: () => import('@/views/ruralFinance/index.vue'),
// name: 'ruralFinanceMain',
// meta: { title: '涉农金融首页' },
// },
],
},
{
@ -247,16 +253,28 @@ export const constantRoutes = [
children: [
{
path: '/sub-operation-service/packaging/sorting',
component: () => import('@/views/packaging/sorting.vue'),
component: () => import('@/views/error/blank.vue'),
name: 'sortingMain',
meta: { title: '分拣首页' },
},
// {
// path: '/sub-operation-service/packaging/sorting',
// component: () => import('@/views/packaging/sorting.vue'),
// name: 'sortingMain',
// meta: { title: '分拣首页' },
// },
{
path: '/sub-operation-service/packaging/index',
component: () => import('@/views/packaging/index.vue'),
component: () => import('@/views/error/blank.vue'),
name: 'packagingMain',
meta: { title: '包装首页' },
},
// {
// path: '/sub-operation-service/packaging/index',
// component: () => import('@/views/packaging/index.vue'),
// name: 'packagingMain',
// meta: { title: '包装首页' },
// },
{
path: '/sub-operation-service/packaging/details',
component: () => import('@/views/packaging/details.vue'),
@ -274,10 +292,16 @@ export const constantRoutes = [
children: [
{
path: '/sub-operation-service/warehouse',
component: () => import('@/views/warehouseLogistics/warehouse/index.vue'),
component: () => import('@/views/error/blank.vue'),
name: 'warehouseMain',
meta: { title: '仓储首页' },
},
// {
// path: '/sub-operation-service/warehouse',
// component: () => import('@/views/warehouseLogistics/warehouse/index.vue'),
// name: 'warehouseMain',
// meta: { title: '仓储首页' },
// },
{
path: '/sub-operation-service/warehouse-detail',
component: () => import('@/views/warehouseLogistics/warehouse/detail.vue'),
@ -286,10 +310,16 @@ export const constantRoutes = [
},
{
path: '/sub-operation-service/logistics',
component: () => import('@/views/warehouseLogistics/logistics/index.vue'),
component: () => import('@/views/error/blank.vue'),
name: 'logistics-list',
meta: { title: '物流首页' },
},
// {
// path: '/sub-operation-service/logistics',
// component: () => import('@/views/warehouseLogistics/logistics/index.vue'),
// name: 'logistics-list',
// meta: { title: '物流首页' },
// },
{
path: '/sub-operation-service/logistics-detail',
component: () => import('@/views/warehouseLogistics/logistics/detail.vue'),

View File

@ -31,9 +31,9 @@ const products = ref([]);
const applyData = [
{ id: 1, title: '耿马绿色蔬菜', imgPath: 'images/brand/11.png' },
{ id: 2, title: '耿马云斛石斛', imgPath: 'images/brand/12.png' },
// { id: 2, title: '', imgPath: 'images/brand/12.png' },
{ id: 3, title: '耿马蒸酶茶', imgPath: 'images/brand/15.png' },
{ id: 4, title: '孟定蔬菜', imgPath: 'images/brand/14.png' },
// { id: 4, title: '', imgPath: 'images/brand/14.png' },
{ id: 5, title: '耿马芒抗金丝凤梨', imgPath: 'images/brand/16.png' },
// { id: 6, name: '', imgPath: 'images/brand/16.png' },
];

View File

@ -7,13 +7,13 @@
<div class="card-left">
<img :src="getAssetsFile('images/brand/1532.png')" alt="" />
<div class="card-content flex-1 flex-column">
<div class="stat-number">999 <span></span></div>
<div class="stat-number">817 <span></span></div>
<div class="stat-label">授权产品</div>
</div>
</div>
<div class="card-right">
<img :src="getAssetsFile('images/brand/cardLeft.png')" alt="" />
<p>较上月上涨 <span>7</span> </p>
<p>较上月上涨 <span>13</span> </p>
</div>
</el-card>
</el-col>
@ -22,13 +22,13 @@
<div class="card-left">
<img :src="getAssetsFile('images/brand/1533.png')" alt="" />
<div class="card-content flex-1 flex-column">
<div class="stat-number">999 <span></span></div>
<div class="stat-label">授权产品</div>
<div class="stat-number">125 <span></span></div>
<div class="stat-label">临期产品</div>
</div>
</div>
<div class="card-right">
<img :src="getAssetsFile('images/brand/cardRight.png')" alt="" />
<p>较上月上涨 <span>7</span> </p>
<p>较上月下降 <span>5</span> </p>
</div>
</el-card>
</el-col>

View File

@ -166,7 +166,47 @@ const filteredProducts = computed(() => products.value.filter((p) => p.status ==
function onInspect(id) {
console.log('查看产品:', id);
// getTraceById(id).then(res=> traceData.value = res)
const mock = {
const mocks = [
{
productName: '耿马镇沙疆西红柿',
quantity: '300KG',
producer: '北大荒技术有限公司',
origin: '耿马县孟定镇下坝村',
productionDate: '2025-6-3',
traceCode: '10.5487542154785XSE254.1040201',
traceCount: 30,
base: {
address: '耿马县孟定镇下坝村',
location: '东经102° · 北纬24°',
area: 9000,
climate: '亚热带高原季风型,温和多雨',
soil: '红壤',
},
farmingRecords: [
{ date: '2025/3/14', operation: '播种西红柿种', operator: '李强' },
{ date: '2025/4/2', operation: '施肥 氮肥', operator: '李强' },
{ date: '2025/5/17', operation: '浇水', operator: '李强' },
{ date: '2025/6/14', operation: '采摘', operator: '李强' },
],
packaging: {
company: '瑞禾农产品包装公司',
type: '纸箱',
person: '李明瑞',
time: '2025-1-20 16:27:41',
},
logistics: {
storageType: '冷藏',
temperature: '2°C',
shipFrom: '北京市朝阳区解放路24号',
shipTo: '上海市黄浦区南京路36号',
},
trade: {
time: '2025-4-2 08:13:52',
buyer: '李楠',
},
img: 'images/brand/product4.png',
},
{
productName: '无土栽培土豆',
quantity: '200KG',
producer: '北大荒技术有限公司',
@ -182,16 +222,16 @@ function onInspect(id) {
soil: '红壤',
},
farmingRecords: [
{ date: '2024/1/2', operation: '播种 20250102批土豆种', operator: '张小东' },
{ date: '2024/2/2', operation: '施肥 氮肥', operator: '张小东' },
{ date: '2024/3/2', operation: '浇水', operator: '张小东' },
{ date: '2024/4/2', operation: '采摘', operator: '张小东' },
{ date: '2025/1/22', operation: '播种 20250102批土豆种', operator: '王岚' },
{ date: '2025/2/14', operation: '施肥 氮肥', operator: '王岚' },
{ date: '2025/3/3', operation: '浇水', operator: '王岚' },
{ date: '2025/4/21', operation: '采摘', operator: '王岚' },
],
packaging: {
company: '瑞禾农产品包装公司',
type: '纸箱',
person: '王大福',
time: '2025-1-2 14:00:47',
person: '李桑',
time: '2025-5-2 07:54:14',
},
logistics: {
storageType: '冷藏',
@ -200,12 +240,59 @@ function onInspect(id) {
shipTo: '上海市黄浦区南京路36号',
},
trade: {
time: '2025-1-2 14:00:47',
buyer: '刘小花',
time: '2025-5-16 16:08:35',
buyer: '刘思楠',
},
img: 'images/brand/product6.png',
};
traceData.value = mock;
},
{
productName: '彩椒南瓜混合',
quantity: '200KG',
producer: '北大荒技术有限公司',
origin: '耿马县孟定镇下坝村',
productionDate: '2025-5-15',
traceCode: '10.5487542154785XSE254.1040201',
traceCount: 30,
base: {
address: '耿马县孟定镇下坝村',
location: '东经102° · 北纬24°',
area: 12000,
climate: '亚热带高原季风型,温和多雨',
soil: '红壤',
},
farmingRecords: [
{ date: '2025/2/8', operation: '播种瓜种', operator: '刘琦' },
{ date: '2025/3/14', operation: '施肥 氮肥', operator: '刘琦' },
{ date: '2025/3/20', operation: '浇水', operator: '刘琦' },
{ date: '2025/4/11', operation: '浇水', operator: '刘琦' },
{ date: '2025/5/15', operation: '采摘', operator: '刘琦' },
],
packaging: {
company: '瑞禾农产品包装公司',
type: '纸箱',
person: '王大福',
time: '2025-5-26 14:26:27',
},
logistics: {
storageType: '冷藏',
temperature: '2°C',
shipFrom: '北京市朝阳区解放路24号',
shipTo: '上海市黄浦区南京路36号',
},
trade: {
time: '2025-6-2 11:00:51',
buyer: '刘小花',
},
img: 'images/brand/product1.png',
},
];
if (id === 1) {
traceData.value = mocks[0];
} else if (id === 2) {
traceData.value = mocks[1];
} else if (id === 3) {
traceData.value = mocks[2];
}
dialogVisible.value = true;
}
const onRevoke = (p) => {

View File

@ -93,7 +93,7 @@ const chartsData = reactive({
backgroundColor: 'rgba(17,95,182,0.5)', //
formatter: function (item) {
let params = [...item];
var res = params[0].name + '<br/>';
var res = params[0].name + '(万元)<br/>';
for (var i = 0, l = params.length; i < l; i++) {
res += params[i].value !== '-' ? params[i].marker + params[i].seriesName + ' : ' + params[i].value + ' <br/>' : '';
}

View File

@ -19,6 +19,22 @@ const chartsData = reactive({
},
tooltip: {
trigger: 'axis',
formatter: function (params) {
let result = params[0].name + '(亿元)<br>'; // x"1"
params.forEach((param) => {
// param.color
const colorDot = `<span style="
display:inline-block;
margin-right:5px;
border-radius:50%;
width:10px;
height:10px;
background-color:${param.color}">
</span>`;
result += `${colorDot} ${param.seriesName}: ${param.value} <br>`;
});
return result;
},
},
grid: {
left: '2%',

View File

@ -51,14 +51,15 @@
:class="[index === currentWeight ? 'act' : 'normal']"
@click="currentWeight = index"
>
{{ item.goodSpecs }}/{{ item.unit }}
{{ item.goodSpecs }}{{ item.unit }}
</div>
</div>
<div class="goods-num">
<div class="num-title">数量</div>
<div class="num-warp">
<el-input-number v-model="saveInfo.num" :min="1" :max="10" />
<span class="is-have">有货</span>
<span v-if="currentStock !== 0" class="is-have">有货: {{ currentStock }}</span>
<span v-else class="is-have">售罄</span>
</div>
</div>
</div>
@ -96,7 +97,13 @@
</el-descriptions>
</div>
<div style="display: flex; justify-content: center; flex-wrap: wrap">
<el-image v-for="(item, index) in currentGood.detailUrl" :key="index" :src="item" style="width: 80%" fit="contain" />
<el-image
v-for="(item, index) in currentGood.detailUrl"
:key="index"
:src="item"
style="width: 90%; margin: 5px 0"
fit="contain"
/>
</div>
</div>
<div v-if="tabVal == 'sourceCode'" class="content-source-code">
@ -122,7 +129,7 @@
</div>
</div>
<div v-if="tabVal == 'evaluate'" class="content-evaluate">
<evaluate :good-id="goodId"></evaluate>
<evaluate :good-id="goodId" :good-url="currentGood.goodUrls[0]"></evaluate>
</div>
</div>
</div>
@ -168,6 +175,10 @@ const currentPrice = computed(() => {
return currentGood.value?.netWeight?.[currentWeight.value]?.goodPrice ?? 0;
});
const currentStock = computed(() => {
return currentGood.value?.netWeight?.[currentWeight.value]?.goodStock ?? 0;
});
const mockData = [
{
goodName: '甜糯玉米种子',
@ -616,7 +627,7 @@ const toCopy = () => {};
.content-detail {
.detail-des {
margin-bottom: 24px;
width: 80%;
width: 90%;
}
}
.content-source-code {

View File

@ -40,32 +40,32 @@
<div class="evaluate-list">
<div class="list-content">
<template v-for="(e, indexe) in 2" :key="indexe">
<template v-for="(e, index) in 1" :key="index">
<div class="evaluate-item">
<div class="evaluate-item-top">
<div class="user-info">
<div class="info-img">
<el-image :src="getAssetsFile('images/ecommerce/' + 'goods.png')?.href ?? ''" fit="cover" />
<el-image :src="getAssetsFile('images/avatar.jfif')?.href ?? ''" fit="cover" />
</div>
<div class="info-txt">
<div class="info-txt-pos">
<div class="info-txt-c">
<div class="name">用户名888888</div>
<div class="time">2025.01.01</div>
<div class="name">{{ mockData[currentMock].userName }}</div>
<div class="time">{{ mockData[currentMock].createTime }}</div>
</div>
</div>
</div>
</div>
<div class="score-val">
<el-rate :model-value="3" :colors="colors" size="large" :disabled="true" />
<el-rate :model-value="mockData[currentMock].stars" :colors="colors" size="large" :disabled="true" />
</div>
</div>
<div class="evaluate-item-content">
<div class="content-txt">经过一段时间种植都长出来了也结出西红柿中等个头入口鲜嫩性价比挺高非常值得推荐</div>
<div class="content-txt">{{ mockData[currentMock].content }}</div>
<div class="content-img">
<template v-for="(m, indexm) in 2" :key="indexm">
<template v-for="(m, indexm) in 1" :key="indexm">
<div class="img-item">
<el-image :src="getAssetsFile('images/ecommerce/' + 'pic.png')?.href ?? ''" fit="cover" />
<el-image :src="goodUrl ? goodUrl : ''" fit="cover" />
</div>
</template>
</div>
@ -92,8 +92,98 @@ const props = defineProps({
type: Number,
default: () => 0,
},
goodUrl: {
type: String,
default: () => '',
},
});
const currentMock = ref(0);
const mockData = ref([
{
userName: '用户17378225',
createTime: '2025.02.05',
content: '正准备复购,基本没踩雷!推荐购买。',
stars: 4,
},
{
userName: '用户35613587',
createTime: '2025.02.06',
content: '平台服务:发货很快,来平台买过好多次了,喜欢平台服务。',
stars: 5,
},
{
userName: '用户33578135',
createTime: '2025.02.08',
content: '物流挺快,到货了也没发现有坏损。',
stars: 4.5,
},
{
userName: '用户23467467',
createTime: '2025.02.10',
content: '包装无损坏,拍品也很好,以后就在平台上购买了,放心,省心,还在犹豫亲们可以下单啦!',
stars: 5,
},
{
userName: '用户78613489',
createTime: '2025.02.14',
content: '实物跟图片描述的一样,不错,值的赞,值得推荐!',
stars: 5,
},
{
userName: '用户23497825',
createTime: '2025.02.18',
content: '少发了商品,在平台联系商家后处理速度很快,马上补发了,商家态度也好。',
stars: 4,
},
{
userName: '用户35789421',
createTime: '2025.02.24',
content: '买错了。退换速度很快,商家很好交流,平台处理速度也很快。',
stars: 4,
},
{
userName: '用户83154378',
createTime: '2025.02.26',
content:
'货品质量非常好,与平台页面描述的完全一致,非常满意,完全超出期望值,发货速度非常快,包装非常仔细严实,运送速度很快,很满意的一次平台购物!',
stars: 5,
},
{
userName: '用户61398765',
createTime: '2025.03.01',
content: '东西很好,价美物廉!收到的时候包装完整,货品比我想象中的还要好!不得不得竖起大拇指。下次需要的时候我还会再来的!',
stars: 5,
},
{
userName: '用户91357862',
createTime: '2025.03.05',
content: '包装很完整,没有破损。发货迅速,态度很好,很满意!很好,很好!没想到平台的服务这么好,商品质量好而价低廉,下次还来,祝生意兴隆!',
stars: 5,
},
{
userName: '用户31578673',
createTime: '2025.03.08',
content: '先说商品质量,总体不错,包装严实,再为平台服务点赞啦,最后点评快递发货很快。希望平台有更多优惠,祝生意兴隆!',
stars: 5,
},
{
userName: '用户43124789',
createTime: '2025.03.10',
content:
'超级喜欢,非常支持,质量非常好,与平台描述的完全一致,非常满意,完全超出期望值,发货速度非常快,包装非常仔细严实,物流公司服务态度很好,运送速度很快,很满意的一次购物。平台客服态度很专业、热情,有问必答,回复也很快。',
stars: 5,
},
]);
function getRandomIndex(mockData) {
if (!Array.isArray(mockData) || mockData.length === 0) {
throw new Error('mockData 必须是非空数组');
}
currentMock.value = Math.floor(Math.random() * mockData.length);
}
const data = reactive({
type: 1,
current: 1,
@ -103,11 +193,11 @@ const data = reactive({
const colors = ref(['#99A9BF', '#25BF82', '#25BF82']);
const totalList = reactive([
{ title: '全部', name: 'all', num: 912 },
{ title: '成活率高', name: 'label1', num: 458 },
{ title: '抗病率高', name: 'label2', num: 242 },
{ title: '抗倒伏率高', name: 'label3', num: 106 },
{ title: '坐果率高', name: 'label4', num: 106 },
{ title: '全部', name: 'all', num: 1 },
{ title: '成活率高', name: 'label1', num: 0 },
{ title: '抗病率高', name: 'label2', num: 0 },
{ title: '抗倒伏率高', name: 'label3', num: 0 },
{ title: '坐果率高', name: 'label4', num: 0 },
]);
let currentlabel = ref('all');
@ -124,10 +214,12 @@ const doAnonymous = () => {
onMounted(() => {
data.goodId = props.goodId;
getContentList();
getRandomIndex(mockData.value);
// getContentList('1');
});
const getContentList = (type) => {
data.type = type;
agriculturalContent(data).then((res) => {
if (res.code === '200') {
console.log(res);

View File

@ -6,7 +6,7 @@
</div>
<div class="goods-name txt-ellipsis clamp2">{{ data.goodName }}</div>
<div class="goods-do">
<div class="price txt-ellipsis clamp">{{ data.goodPrice }}/{{ data.unit }}</div>
<div class="price txt-ellipsis clamp">{{ data.goodPrice }}</div>
<div class="do">
<div class="iconfont icon-cart"></div>
</div>
@ -54,8 +54,10 @@ const toDetail = (id, pid) => {
}
}
.goods-name {
width: 100%;
margin-top: 8px;
font-size: 16px;
font-size: 1.4em;
height: 2.8em;
color: $color-666;
text-align: left;
}

View File

@ -0,0 +1,40 @@
<template>
<div
class="blank"
:style="{
backgroundImage: `url(${backgroundImageUrl})`,
backgroundSize: '30%',
backgroundPosition: 'center',
backgroundRepeat: 'no-repeat',
}"
>
正在开发中
</div>
</template>
<script setup>
import { ref } from 'vue';
import { getAssetsFile } from '@/utils/index.js';
/* --------------- data --------------- */
// #region
const backgroundImageUrl = ref(getAssetsFile('images/empty.png'));
// #endregion
/* --------------- methods --------------- */
// #region
// #endregion
</script>
<style lang="scss" scoped>
.blank {
height: calc(100vh - 300px);
background-color: white;
width: 100%;
text-align: center;
padding: 50px;
font-weight: bold;
font-size: 20px;
}
</style>

View File

@ -54,7 +54,23 @@ const option = {
color: '#5c6c7c',
},
padding: [10, 10],
extraCssText: 'box-shadow: 1px 0 2px 0 rgba(163,163,163,0.5)',
extraCssText: 'box-shadow: 1px 0 2px 0 rgba(163,163,163,0.5); text-align: left;',
formatter: function (params) {
let result = params[0].name + '<br>'; // x"1"
params.forEach((param) => {
// param.color
const colorDot = `<span style="
display:inline-block;
margin-right:5px;
border-radius:50%;
width:10px;
height:10px;
background-color:${param.color}">
</span>`;
result += `${colorDot} ${param.seriesName}: ${param.value}${param.seriesName === '茎秆高度' ? 'cm' : param.seriesName === '叶片温度' ? '℃' : 'mm'} <br>`;
});
return result;
},
},
grid: {
top: '20%',

View File

@ -81,7 +81,7 @@ onMounted(() => {
const option = {
backgroundColor: 'rgba(255, 255, 255, 0)', //
title: {
text: '气象数据',
text: '气象监测数据',
left: 20,
top: 10,
textStyle: {

View File

@ -107,14 +107,17 @@ onMounted(async () => {
<div style="display: flex; justify-content: space-between; align-items: center">
<div class="video-wrapper">
<video v-if="num === 1" ref="videoPlayer" src="../components/jiankong.mp4" controls loop autoplay muted></video>
<video v-else ref="videoPlayer" src="../components/jiankong1.mp4" controls loop autoplay muted></video>
<video v-else-if="num === 2" ref="videoPlayer" src="../components/jiankong1.mp4" controls loop autoplay muted></video>
<video v-else-if="num === 4" ref="videoPlayer" src="../components/jiankong2.mp4" controls loop autoplay muted></video>
<video v-else-if="num === 5" ref="videoPlayer" src="../components/jiankong3.mp4" controls loop autoplay muted></video>
<video v-else-if="num === 6" ref="videoPlayer" src="../components/jiankong4.mp4" controls loop autoplay muted></video>
<div v-if="loading" class="status-message">正在加载直播流...</div>
<div v-if="error" class="status-message error">{{ error }}</div>
</div>
<div class="pictures-wrapper">
<img :src="getAssetsFile('images/smartFarm/goUp.png')" alt="" style="width: 100px" />
<img :src="getAssetsFile('images/smartFarm/testPic1.png')" style="width: 80%; margin: 5px 0" :alt="devices[currentDevice].detail" />
<img :src="getAssetsFile('images/smartFarm/testPic1.png')" style="width: 80%; margin: 5px 0" :alt="devices[currentDevice].detail" />
<img :src="getAssetsFile('images/smartFarm/testPic2.png')" style="width: 80%; margin: 5px 0" :alt="devices[currentDevice].detail" />
<img :src="getAssetsFile('images/smartFarm/testPic3.png')" style="width: 80%; margin: 5px 0" :alt="devices[currentDevice].detail" />
<img :src="getAssetsFile('images/smartFarm/goDown.png')" alt="" style="width: 100px" />
</div>
</div>

View File

@ -25,24 +25,27 @@
<div class="details-block">
<div class="detail">
<div class="leftTitle">温度</div>
<div class="rightValue">
{{ currentData.temp }}
</div>
<div class="rightValue">{{ currentData.temp }}</div>
</div>
<div class="detail">
<div class="leftTitle">PM2.5</div>
<div class="rightValue">{{ currentData.PM2 }}μg/</div>
</div>
<div class="detail">
<div class="leftTitle">作物虫害</div>
<div class="rightValue">
{{ currentData.bugs === 0 ? '无' : '有' }}
</div>
</div>
<div class="detail">
<div class="leftTitle">土壤温度</div>
<div class="rightValue">{{ currentData.dustTemp }}</div>
<div class="leftTitle">光照度</div>
<div class="rightValue">{{ currentData.light }}Lux</div>
</div>
<!-- <div class="detail">-->
<!-- <div class="leftTitle">作物虫害</div>-->
<!-- <div class="rightValue">-->
<!-- {{ currentData.bugs === 0 ? '无' : '有' }}-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="detail">-->
<!-- <div class="leftTitle">土壤温度</div>-->
<!-- <div class="rightValue">{{ currentData.dustTemp }}</div>-->
<!-- </div>-->
</div>
<div class="details-block">
<div class="detail">
@ -53,16 +56,17 @@
<div class="leftTitle">PM10</div>
<div class="rightValue">{{ currentData.temp }}μg/</div>
</div>
<div class="detail">
<div class="leftTitle">作物病害</div>
<div class="rightValue">
{{ currentData.sick === 0 ? '无' : '有' }}
</div>
</div>
<div class="detail">
<div class="leftTitle">土壤湿度</div>
<div class="rightValue">{{ currentData.dustWet }}%</div>
</div>
<div class="detail">&nbsp;</div>
<!-- <div class="detail">-->
<!-- <div class="leftTitle">作物病害</div>-->
<!-- <div class="rightValue">-->
<!-- {{ currentData.sick === 0 ? '无' : '有' }}-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="detail">-->
<!-- <div class="leftTitle">土壤湿度</div>-->
<!-- <div class="rightValue">{{ currentData.dustWet }}%</div>-->
<!-- </div>-->
</div>
<div class="details-block">
<div class="detail">
@ -71,20 +75,17 @@
{{ currentData.wind }}
</div>
</div>
<div class="detail">
<div class="leftTitle">光照度</div>
<div class="rightValue">{{ currentData.light }}Lux</div>
</div>
<div class="detail">
<div class="leftTitle">风速</div>
<div class="rightValue">{{ currentData.temp }}m/s</div>
</div>
<div class="detail">
<div class="leftTitle">土壤酸碱度</div>
<div class="rightValue">
{{ currentData.PH }}
</div>
</div>
<div class="detail">&nbsp;</div>
<!-- <div class="detail">-->
<!-- <div class="leftTitle">土壤酸碱度</div>-->
<!-- <div class="rightValue">-->
<!-- {{ currentData.PH }}-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
</el-col>
@ -93,65 +94,97 @@
<el-card shadow="hover" style="margin-top: 10px; border-radius: 16px">
<div style="display: flex; padding: 20px">
<div style="width: 30%">
<div style="font-size: 18px; font-weight: bold; text-align: left">土壤数据</div>
<div style="display: flex">
<div style="font-size: 18px; font-weight: bold; text-align: left">土壤监测数据</div>
<!-- <div style="display: flex">-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/光照传感器.png')" alt="" />-->
<!-- 光照-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.light }}</div>-->
<!-- </div>-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/排风.png')" alt="" />-->
<!-- 排风-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.wind }}</div>-->
<!-- </div>-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/蒸腾.png')" alt="" />-->
<!-- 蒸腾-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.evapotranspiration }}</div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div style="display: flex">-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/土壤湿度.png')" alt="" />-->
<!-- 湿度-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.wet.min }}</div>-->
<!-- <div class="values">{{ dustData.wet.max }}</div>-->
<!-- </div>-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/土壤温度.png')" alt="" />-->
<!-- 温度-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.temp.min }}</div>-->
<!-- <div class="values">{{ dustData.temp.max }}</div>-->
<!-- </div>-->
<!-- <div class="dustData">-->
<!-- <div>-->
<!-- <img :src="getAssetsFile('images/smartFarm/空气.png')" alt="" />-->
<!-- 空气-->
<!-- </div>-->
<!-- <div class="values">{{ dustData.air.dirt }}</div>-->
<!-- <div class="values">{{ dustData.air.wet }}</div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="report">-->
<!-- <div><img :src="getAssetsFile('images/smartFarm/bell.png')" alt="" /></div>-->
<!-- <div class="warning">-->
<!-- <div>温度</div>-->
<!-- <div>36</div>-->
<!-- </div>-->
<!-- <div class="warning">-->
<!-- <div>超高</div>-->
<!-- <div>4</div>-->
<!-- </div>-->
<!-- </div>-->
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/光照传感器.png')" alt="" />
光照
<div style="width: 24%; display: flex; flex-direction: column; justify-content: space-between">
<div>土壤深度</div>
<div style="position: relative">-10cm<img :src="getAssetsFile('images/smartFarm/deep.png')" class="deepIcon" alt="" /></div>
<div style="position: relative">-20cm<img :src="getAssetsFile('images/smartFarm/deep.png')" class="deepIcon" alt="" /></div>
<div style="position: relative">-30cm<img :src="getAssetsFile('images/smartFarm/deep.png')" class="deepIcon" alt="" /></div>
</div>
<div class="values">{{ dustData.light }}</div>
<div style="width: 24%; display: flex; flex-direction: column; justify-content: space-between">
<div>土壤水分</div>
<div>62%</div>
<div>55%</div>
<div>53%</div>
</div>
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/排风.png')" alt="" />
排风
<div style="width: 24%; display: flex; flex-direction: column; justify-content: space-between">
<div>土壤温度</div>
<div>22.5</div>
<div>18.3</div>
<div>15.7</div>
</div>
<div class="values">{{ dustData.wind }}</div>
</div>
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/蒸腾.png')" alt="" />
蒸腾
</div>
<div class="values">{{ dustData.evapotranspiration }}</div>
</div>
</div>
<div style="display: flex">
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/土壤湿度.png')" alt="" />
湿度
</div>
<div class="values">{{ dustData.wet.min }}</div>
<div class="values">{{ dustData.wet.max }}</div>
</div>
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/土壤温度.png')" alt="" />
温度
</div>
<div class="values">{{ dustData.temp.min }}</div>
<div class="values">{{ dustData.temp.max }}</div>
</div>
<div class="dustData">
<div>
<img :src="getAssetsFile('images/smartFarm/空气.png')" alt="" />
空气
</div>
<div class="values">{{ dustData.air.dirt }}</div>
<div class="values">{{ dustData.air.wet }}</div>
<div style="width: 24%; display: flex; flex-direction: column; justify-content: space-between">
<div>PH值</div>
<div>6.5</div>
<div>6.2</div>
<div>6.1</div>
</div>
</div>
<div class="report">
<div><img :src="getAssetsFile('images/smartFarm/bell.png')" alt="" /></div>
<div class="warning">
<div>温度</div>
<div>36</div>
</div>
<div class="warning">
<div>超高</div>
<div>4</div>
<div>土壤水分偏低需要灌溉</div>
</div>
</div>
</div>
@ -161,7 +194,7 @@
<div style="width: 35%">
<div style="margin-top: 70px; display: flex; text-align: left">
<el-col :span="12">
<el-row class="dataTitle">泵压管控mpa</el-row>
<el-row class="dataTitle">泵压管控Mpa</el-row>
<el-row>
<el-col :span="12">
<span style="font-size: 15px">输入</span>
@ -174,36 +207,31 @@
</el-row>
</el-col>
<el-col :span="12">
<el-row class="dataTitle">灌溉流量m²/h</el-row>
<el-row class="dataTitle">水泵实时流量m³/h</el-row>
<el-row>
<el-col :span="12">
<span style="font-size: 15px">灌溉</span>
<span class="values">{{ dustData.flow.output }}</span>
</el-col>
<el-col :span="12">
<span style="font-size: 15px">回液</span>
<span class="values">{{ dustData.flow.input }}</span>
</el-col>
</el-row>
</el-col>
</div>
<div style="display: flex; text-align: left">
<el-col :span="12">
<el-row class="dataTitle">水肥监测</el-row>
<el-row>
<el-col :span="12">
<span style="font-size: 15px">PH</span>
<span class="values">{{ dustData.fertilization.ph }}</span>
</el-col>
<el-col :span="12">
<span style="font-size: 15px">输入</span>
<span class="values">{{ dustData.fertilization.output }}</span>
</el-col>
</el-row>
</el-col>
<el-col :span="12">&nbsp;</el-col>
</div>
<el-row class="dataTitle">灌溉流量m²/h</el-row>
<!-- <div style="display: flex; text-align: left">-->
<!-- <el-col :span="12">-->
<!-- <el-row class="dataTitle">水肥监测</el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <span style="font-size: 15px">PH</span>-->
<!-- <span class="values">{{ dustData.fertilization.ph }}</span>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <span style="font-size: 15px">输入</span>-->
<!-- <span class="values">{{ dustData.fertilization.output }}</span>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-col>-->
<!-- <el-col :span="12">&nbsp;</el-col>-->
<!-- </div>-->
<el-row class="dataTitle" style="margin-top: 55px">月灌溉量m³</el-row>
<charts-flow style="height: 150px; width: 100%"></charts-flow>
</div>
</div>
@ -211,7 +239,7 @@
<el-card shadow="hover" style="margin-top: 10px; border-radius: 16px">
<div style="display: flex; padding: 20px">
<div style="width: 50%">
<div style="font-size: 18px; font-weight: bold; text-align: left">产能预测</div>
<div style="font-size: 18px; font-weight: bold; text-align: left">产能预测数据</div>
<div style="display: flex; justify-content: flex-start; margin: 20px 0">
<div class="plansBlock" style="background-color: #25bf82">
<div style="">预计生产</div>
@ -354,12 +382,13 @@ const dustData = ref({
wet: '34%',
},
pressure: {
input: '11',
end: 2,
input: '0.6',
end: 0.3,
},
flow: {
temp: '53',
input: '125',
output: '180.3',
},
fertilization: {
ph: 8,
@ -463,9 +492,9 @@ const changeMap2 = (params) => {
//
pressure: {
// (5-15 MPa)
input: '@natural(5, 15)',
input: '@natural(0.2, 0.8)',
// (1-5)
end: '@natural(1, 5)',
end: '@natural(0.2, 0.8)',
},
//
@ -474,6 +503,7 @@ const changeMap2 = (params) => {
temp: '@natural(30, 60)',
// (50-200 m²/h)
input: '@natural(50, 200)',
output: '@natural(175, 185)',
},
//
@ -592,6 +622,7 @@ const generateFarmData = (baseTemp = 18) => {
color: #999999;
}
.warning {
font-size: 14px;
div {
margin: 4px 0;
}
@ -609,20 +640,18 @@ const generateFarmData = (baseTemp = 18) => {
}
}
.dustData {
width: 33%;
height: 70px;
width: 100%;
display: flex;
justify-content: space-between;
flex-direction: column;
font-size: 15px;
margin: 20px 0;
.values {
color: #25bf82;
}
img {
height: 20px;
margin-right: 5px;
}
justify-content: space-around;
font-size: 14px;
height: 250px;
padding: 30px 0;
}
.deepIcon {
width: 30px;
position: absolute;
left: -20px;
top: -2px;
}
.details {
display: flex;
@ -631,7 +660,7 @@ const generateFarmData = (baseTemp = 18) => {
width: 29%;
display: flex;
flex-direction: column;
justify-content: space-around;
justify-content: space-between;
}
.detail {
display: flex;

View File

@ -6,7 +6,7 @@
<devices :title="'智能灌溉设备'" :devices="devices"></devices>
</div>
<div style="display: flex; align-items: stretch; justify-content: space-between; margin-top: 20px">
<stream :title="'灌溉监测实时监控'" :devices="devices" style="width: 60%; margin-right: 20px; height: fit-content"></stream>
<stream :title="'灌溉监测监控'" :num="5" :devices="devices" style="width: 60%; margin-right: 20px; height: fit-content"></stream>
<DataDisplay :title="'灌溉分析'" :data="rightData" :show-image="true" :image-list="srcList" style="flex: 1"></DataDisplay>
</div>
</template>

View File

@ -6,7 +6,7 @@
<devices :title="'智能浸种设备'" :devices="devices"></devices>
</div>
<div style="display: flex; align-items: stretch; justify-content: space-between; margin-top: 20px">
<stream :title="'浸种监测实时监控'" :devices="devices" style="width: 60%; margin-right: 20px; height: fit-content"></stream>
<stream :title="'浸种监测监控'" :num="6" :devices="devices" style="width: 60%; margin-right: 20px; height: fit-content"></stream>
<DataDisplay :title="'浸种分析'" :data="rightData" :show-image="true" :image-list="srcList" style="flex: 1"></DataDisplay>
</div>
</template>

View File

@ -147,10 +147,10 @@ const chooseIcon = (type) => {
</div>
<div style="margin-top: 10px; display: flex; justify-content: space-between">
<div style="display: flex; justify-content: space-between; margin-top: 10px">
<stream :title="'病害监测实时监控'" :devices="devices" style="width: 60%; height: fit-content"></stream>
<stream :title="'病害监测监控'" :devices="devices" style="width: 60%; height: fit-content"></stream>
<div style="width: 38%">
<el-card style="border-radius: 16px; padding: 10px">
<div style="font-size: 16px; font-weight: bold; text-align: left; color: #000">害数据</div>
<div style="font-size: 16px; font-weight: bold; text-align: left; color: #000">害数据</div>
<sick-data style="width: 38%; min-width: 300px"></sick-data>
</el-card>
</div>
@ -158,7 +158,7 @@ const chooseIcon = (type) => {
</div>
<div style="margin-top: 10px; display: flex; justify-content: space-between">
<div style="display: flex; justify-content: space-between; margin-top: 10px; width: 100%">
<stream :title="'虫害监测实时监控'" :num="2" :devices="devices" style="width: 60%; height: fit-content"></stream>
<stream :title="'虫害监测监控'" :num="2" :devices="devices" style="width: 60%; height: fit-content"></stream>
<div style="width: 38%">
<el-card style="border-radius: 16px; padding: 10px">
<div style="font-size: 16px; font-weight: bold; text-align: left; color: #000">虫害数据</div>

View File

@ -32,7 +32,7 @@
</div>
<div class="envData">
<div class="dt">
<div class="values">{{ monitorData.co2 }}</div>
<div class="values">{{ monitorData.temperature }}</div>
<div class="points">空气温度</div>
</div>
<div class="dt">
@ -164,7 +164,7 @@ const getMockData = () => {
//
const leftData = Mock.mock({
co2: () => randomRange(200, 800, 0) + 'ppm', // CO300~800ppm
temperature: () => randomRange(-10, 40, 1) + '℃', // -10~40
temperature: () => randomRange(19, 33, 1) + '℃', // -10~40
humidity: () => randomRange(10, 100, 0) + '%', // 湿10%~100%
wind: '@pick(["东南风", "西南风", "东北风", "西北风"])',
rainfall: () => randomRange(0, 200, 1) + 'mm', // 0~200mm1

View File

@ -6,7 +6,7 @@
<devices :title="'田间监测设备'" :devices="devices"></devices>
</div>
<div style="display: flex; justify-content: space-between; margin-top: 10px">
<stream :title="'田间监测实时监控'" :devices="devices" style="width: 60%; height: fit-content" @change-device="changeDevice"></stream>
<stream :title="'田间监测监控'" :devices="devices" style="width: 60%; height: fit-content" @change-device="changeDevice"></stream>
<data-display style="width: calc(40% - 20px)" title="作物生长状态" show-charts :data="textData"></data-display>
</div>
</template>

View File

@ -6,7 +6,7 @@
<devices :title="'智能配肥设备'" :devices="devices"></devices>
</div>
<div style="display: flex; justify-content: space-between; margin-top: 10px">
<stream :title="'施肥监测实时监控'" :devices="devices" style="width: 60%; height: fit-content"></stream>
<stream :title="'施肥监测监控'" :devices="devices" :num="4" style="width: 60%; height: fit-content"></stream>
<el-card style="width: calc(40% - 20px); border-radius: 16px">
<div style="font-size: 16px; font-weight: bold; text-align: left">配肥分析</div>
<div class="plantStatus">
@ -17,14 +17,14 @@
<div class="leftKey">土壤养分含量:</div>
<div class="errorValue">N 元素不足</div>
</div>
<div class="plantStatus">
<div class="leftKey">光照强度:</div>
<div class="errorValue">偏高</div>
</div>
<div class="plantStatus">
<div class="leftKey">风速:</div>
<div class="rightValue">微风</div>
</div>
<!-- <div class="plantStatus">-->
<!-- <div class="leftKey">光照强度:</div>-->
<!-- <div class="errorValue">偏高</div>-->
<!-- </div>-->
<!-- <div class="plantStatus">-->
<!-- <div class="leftKey">风速:</div>-->
<!-- <div class="rightValue">微风</div>-->
<!-- </div>-->
<div class="plantStatus">
<div class="leftKey">作物生长状态:</div>
<div class="rightValue">良好</div>