提交 1dbbad7a 作者: 方治民

Merge branch 'main' of https://gitee.com/mrf/agri-app

......@@ -4,7 +4,7 @@ import { CodeGenerator, Property } from 'pont-engine'
// 接口 API 前缀
// 通常与项目的 env 配置中的 VITE_GLOB_API_URL_PREFIX 相同
const API_URL_PREFIX = '/api'
const API_URL_PREFIX = '/jeecgboot'
export default class BasicGenerator extends CodeGenerator {
checkJsonParam(inter: Interface, paramsCode: string): boolean {
......@@ -60,8 +60,8 @@ export default class BasicGenerator extends CodeGenerator {
sourceResponseType === 'File'
? 'void'
: sourceResponseType === 'defs.ResultString'
? 'string'
: sourceResponseType.replace(/defs.Result(.*)/, 'defs.$1')
? 'string'
: sourceResponseType.replace(/defs.Result(.*)/, 'defs.$1')
return `
export ${paramsCode}
......@@ -127,8 +127,8 @@ export default class BasicGenerator extends CodeGenerator {
requestParams.includes('form')
? `headers: { 'Content-Type': 'multipart/form-data;charset=UTF-8' },`
: isBody
? `headers: { 'Content-Type': 'application/json' },`
: ''
? `headers: { 'Content-Type': 'application/json' },`
: ''
}
...config,
......
......@@ -2,6 +2,9 @@ import { otherHttp } from '/@/utils/http/axios'
enum Api {
zoneList = '/online/cgform/api/getData/01fd687ecb164aea914e92047e144d66', // 金刚区菜单数据
productMarketList = '/online/cgform/api/getData/5b71e11020d44366b2d130e200c7a640', // 热门产地行情
serviceStatsList = '/online/cgform/api/getData/491863dde351404da63a1a6e8c699c4c', // 服务展示窗
agricultureClassList = '/online/cgform/api/getData/311c300e05694ba69a063d04c8572e9e', // 农技课堂
}
/**
......@@ -14,3 +17,36 @@ export function zoneList(params = {}) {
params,
})
}
/**
* @param params 请求参数
* @description: 热门产地行情数据
*/
export function productMarketList(params = {}) {
return otherHttp.get({
url: Api.productMarketList,
params,
})
}
/**
* @param params 请求参数
* @description: 服务展示窗数据
*/
export function serviceStatsList(params = {}) {
return otherHttp.get({
url: Api.serviceStatsList,
params,
})
}
/**
* @param params 请求参数
* @description: 农技课堂数据
*/
export function agricultureClassList(params = {}) {
return otherHttp.get({
url: Api.agricultureClassList,
params,
})
}
import { otherHttp } from '/@/utils/http/axios'
enum Api {
zoneList = '/online/cgform/api/getData/01fd687ecb164aea914e92047e144d66', // 功能菜单数据
agricultureModelsList = '/online/cgform/api/getData/7b2983df6ddf416aba68db8b0ab234ab', // 农业模型数据
baseManagementList = '/online/cgform/api/getData/e4e4e6c901254b60b1e7a005097999ec', // 基地管理数据
commonToolsList = '/online/cgform/api/getData/3a7fbb877f304b7d83935caa454859c4', // 常用工具数据
}
/**
* @param params 请求参数
* @description: 金刚区菜单数据
*/
export function zoneList(params = {}) {
return otherHttp.get({
url: Api.zoneList,
params,
})
}
/**
* @param params 请求参数
* @description: 农业模型数据
*/
export function agricultureModelsList(params = {}) {
return otherHttp.get({
url: Api.agricultureModelsList,
params,
})
}
/**
* @param params 请求参数
* @description: 基地管理数据
*/
export function baseManagementList(params = {}) {
return otherHttp.get({
url: Api.baseManagementList,
params,
})
}
/**
* @param params 请求参数
* @description: 常用工具数据
*/
export function commonToolsList(params = {}) {
return otherHttp.get({
url: Api.commonToolsList,
params,
})
}
......@@ -178,53 +178,43 @@
}
}
},
// pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "Basic APP"
}
},
// ================================ 通用页面分割线 ====================================
// === 关于我们 ===
{
"path": "pages/common/about/index",
"style": {
"navigationBarTitleText": "关于我们"
}
},
// === 问题反馈 ===
{
"path": "pages/common/feedback/index",
"style": {
"navigationBarTitleText": "问题反馈"
}
},
// === Webview ===
{
"path": "pages/common/webview/index",
"style": {
"navigationBarTitleText": ""
}
},
// === PDF 文件预览 ===
{
"path": "pages/common/viewer/pdf",
"style": {
"navigationBarTitleText": ""
}
},
// === 空页面(开发中...) ===
{
"path": "pages/common/coding/coding",
"style": {
// #ifdef H5
"titleNView": false,
// #endif
"navigationBarTitleText": "开发中"
}
},
// === 版本更新 ===
{
"path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup",
"style": {
......@@ -241,7 +231,6 @@
"disableScroll": true
}
},
// === 应用全屏通知弹窗(场景:应用维护通知、用户通知公告等) ===
{
"path": "pages/common/notice/index",
"style": {
......@@ -265,9 +254,7 @@
"easycom": {
"autoscan": true,
"custom": {
// https://doc.firstui.cn/docs/introduce.html
"^fui-(.*)": "@/components/FirstUI/fui-$1/fui-$1.vue",
// https://ext.dcloud.net.cn/plugin?id=55#detail
"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
}
},
......
......@@ -11,12 +11,14 @@
{ id: 4, name: '采摘' },
{ id: 5, name: '其他' },
],
currentCategoryId: 1,
// 用工类型标签
employmentTabs: [
{ id: 1, name: '推荐用工' },
{ id: 2, name: '我的用工' },
],
currentEmploymentId: 1,
// 用工列表
employmentList: [
......@@ -87,12 +89,14 @@
// 分类标签点击事件
function onCategoryTabClick(tab: any) {
console.log('点击分类标签:', tab)
pageData.currentCategoryId = tab.id
// 在这里添加具体的分类标签点击逻辑
}
// 用工类型标签点击事件
function onEmploymentTabClick(tab: any) {
console.log('点击用工类型标签:', tab)
pageData.currentEmploymentId = tab.id
// 在这里添加具体的用工类型标签点击逻辑
}
......@@ -117,10 +121,13 @@
v-for="tab in pageData.categoryTabs"
:key="tab.id"
class="codefun-flex-col codefun-justify-start codefun-items-center"
:class="[tab.id === 1 ? 'text-wrapper' : 'text-wrapper_2', tab.id > 1 ? 'codefun-ml-12' : '']"
:class="[
tab.id === pageData.currentCategoryId ? 'text-wrapper' : 'text-wrapper_2',
tab.id > 1 ? 'codefun-ml-12' : '',
]"
@click="onCategoryTabClick(tab)"
>
<text class="font_2" :class="[`text_${tab.id + 1}`]">
<text class="font_2 text_2">
{{ tab.name }}
</text>
</view>
......@@ -130,15 +137,11 @@
<view
v-for="tab in pageData.employmentTabs"
:key="tab.id"
class="codefun-flex-col codefun-justify-start codefun-items-center"
:class="[
tab.id === 1 ? 'text-wrapper_3' : '',
tab.id > 1 ? 'codefun-self-start' : '',
tab.id > 1 ? 'ml-55' : '',
]"
class="codefun-flex-col codefun-justify-start codefun-items-center text-50p"
:class="[tab.id === pageData.currentEmploymentId ? 'text-wrapper_3' : 'codefun-self-start']"
@click="onEmploymentTabClick(tab)"
>
<text class="font_2" :class="[`text_${tab.id + 6}`]">
<text class="font_2">
{{ tab.name }}
</text>
</view>
......@@ -309,16 +312,25 @@
border-right: solid 2rpx #ffffffcc;
border-top: solid 2rpx #ffffffcc;
border-bottom: solid 2rpx #ffffffcc;
.text-50p {
width: 50%;
padding: 0.75rem 0 1.625rem;
}
.text-wrapper_3 {
padding: 24rpx 0 52rpx;
background-color: #ffffff;
border-radius: 32rpx;
width: 348rpx;
height: 102rpx;
.text_7 {
color: #333333;
line-height: 26.16rpx;
}
.font_2 {
color: #1f2937;
}
}
.codefun-self-start {
.font_2 {
color: #5db66f;
}
}
.text_8 {
margin-top: 20rpx;
......@@ -343,11 +355,11 @@
.font_4 {
font-size: 24rpx;
font-family: DingTalk Sans;
line-height: 22rpx;
// line-height: 22rpx;
color: #999999;
}
.text_10 {
line-height: 23.36rpx;
// line-height: 23.36rpx;
}
}
.image_8 {
......
<script setup lang="ts">
import { reactive } from 'vue'
import { onPullDownRefresh } from '@dcloudio/uni-app'
import { onPullDownRefresh, onShow } from '@dcloudio/uni-app'
import Navigate from '@/utils/page/navigate'
import * as HomeAPI from '@/api/model/home'
import * as NongChangAPI from '@/api/model/nongchang'
onShow(() => {
// 获取金刚区菜单数据
getZoomList()
// 获取农业模型数据
getAgricultureModelsList()
// 获取基地管理数据
getBaseManagementList()
// 获取常用工具数据
getCommonToolsList()
// 农技课堂
getAgricultureClassList()
})
// 下拉刷新
onPullDownRefresh(() => {
setTimeout(function () {
......@@ -21,11 +37,11 @@
// 功能菜单
menuItems: [
{ id: 1, name: '监测预警', icon: '/static/images/codefun/e683f9d10dc21da45abffbfa4c56fffb.png' },
{ id: 2, name: '农业模型', icon: '/static/images/codefun/afdf5cf91bb1832ec12b89ba1f8a4a22.png' },
{ id: 3, name: '基地管理', icon: '/static/images/codefun/8ce0f7de048a5d10fd901fa4caee40fd.png' },
{ id: 4, name: '信用中心', icon: '/static/images/codefun/bc6853d7f464c445f1d6cc5f3b37103d.png' },
{ id: 5, name: '灵活用工', icon: '/static/images/codefun/104cbc5dca418b07e6933d2e953db1d8.png' },
// { id: 1, name: '监测预警', icon: '/static/images/codefun/e683f9d10dc21da45abffbfa4c56fffb.png' },
// { id: 2, name: '农业模型', icon: '/static/images/codefun/afdf5cf91bb1832ec12b89ba1f8a4a22.png' },
// { id: 3, name: '基地管理', icon: '/static/images/codefun/8ce0f7de048a5d10fd901fa4caee40fd.png' },
// { id: 4, name: '信用中心', icon: '/static/images/codefun/bc6853d7f464c445f1d6cc5f3b37103d.png' },
// { id: 5, name: '灵活用工', icon: '/static/images/codefun/104cbc5dca418b07e6933d2e953db1d8.png' },
],
// 农场信息
......@@ -41,30 +57,30 @@
// 农业模型
agricultureModels: [
{
id: 1,
image: '/static/images/codefun/d8106d6756782001856157ea8933e6f0.png',
name: '柑橘模型',
description: '精准预测柑橘生长周期',
actionText: '查看介绍',
link: '/pages/nongyedamoxing/nongyedamoxing',
},
{
id: 2,
image: '/static/images/codefun/2716e8578a8409fc69b6b25ca47dd988.png',
name: '作物生长监测',
description: 'AI识别生长状况',
actionText: '查看介绍',
link: '/pages/nongyedamoxing/nongyedamoxing',
},
{
id: 3,
image: '/static/images/codefun/f29a54a031b5665bf1522b973b109416.png',
name: '产能模型',
description: '基于作物生长状况产能构建模型',
actionText: '查看介绍',
link: '/pages/nongyedamoxing/nongyedamoxing',
},
// {
// id: 1,
// image: '/static/images/codefun/d8106d6756782001856157ea8933e6f0.png',
// name: '柑橘模型',
// description: '精准预测柑橘生长周期',
// actionText: '查看介绍',
// link: '/pages/nongyedamoxing/nongyedamoxing',
// },
// {
// id: 2,
// image: '/static/images/codefun/2716e8578a8409fc69b6b25ca47dd988.png',
// name: '作物生长监测',
// description: 'AI识别生长状况',
// actionText: '查看介绍',
// link: '/pages/nongyedamoxing/nongyedamoxing',
// },
// {
// id: 3,
// image: '/static/images/codefun/f29a54a031b5665bf1522b973b109416.png',
// name: '产能模型',
// description: '基于作物生长状况产能构建模型',
// actionText: '查看介绍',
// link: '/pages/nongyedamoxing/nongyedamoxing',
// },
],
// 灵活用工
......@@ -76,41 +92,41 @@
// 基地管理
baseManagement: [
{
id: 1,
name: '基础信息',
icon: '/static/images/codefun/652ff68221e41e59bd253d90a260a9d2.png',
value: 3,
unit: '个',
},
{
id: 2,
name: '作物管理',
icon: '/static/images/codefun/73f2cd7926e10ad8d0222682c6f0dd44.png',
value: 3,
unit: '种',
},
{
id: 3,
name: '农资管理',
icon: '/static/images/codefun/d5224faf803b94f41aea2c682a8b30fe.png',
value: 4,
unit: '项',
},
{
id: 4,
name: '销售记录',
icon: '/static/images/codefun/9489121f8d1fa3d7847a2ef3e45b8753.png',
value: 5,
unit: '笔',
},
{
id: 5,
name: '收支概览',
icon: '/static/images/codefun/68ae1a4d9d9f5bcd80dd2a4603ac7cdf.png',
value: 8300,
unit: '元',
},
// {
// id: 1,
// name: '基础信息',
// icon: '/static/images/codefun/652ff68221e41e59bd253d90a260a9d2.png',
// value: 3,
// unit: '个',
// },
// {
// id: 2,
// name: '作物管理',
// icon: '/static/images/codefun/73f2cd7926e10ad8d0222682c6f0dd44.png',
// value: 3,
// unit: '种',
// },
// {
// id: 3,
// name: '农资管理',
// icon: '/static/images/codefun/d5224faf803b94f41aea2c682a8b30fe.png',
// value: 4,
// unit: '项',
// },
// {
// id: 4,
// name: '销售记录',
// icon: '/static/images/codefun/9489121f8d1fa3d7847a2ef3e45b8753.png',
// value: 5,
// unit: '笔',
// },
// {
// id: 5,
// name: '收支概览',
// icon: '/static/images/codefun/68ae1a4d9d9f5bcd80dd2a4603ac7cdf.png',
// value: 8300,
// unit: '元',
// },
],
// 监测预警图表数据
......@@ -194,11 +210,63 @@
// 农技学习
agricultureClass: {
title: '专家实录—鸡饲养技术',
expert: '张教授',
info: '23:15|2.3万次播放',
time: '',
videoList: [],
},
current: 0,
})
function getZoomList() {
NongChangAPI.zoneList({
pageNo: 1,
pageSize: 5,
status: 1,
type: 2,
}).then((res) => {
const { records } = res
pageData.menuItems = []
pageData.menuItems = records
})
}
function getAgricultureModelsList() {
NongChangAPI.agricultureModelsList({
status: 1,
}).then((res) => {
const { records } = res
pageData.agricultureModels = []
pageData.agricultureModels = records
})
}
function getBaseManagementList() {
NongChangAPI.baseManagementList({
pageNo: 1,
pageSize: 5,
status: 1,
}).then((res) => {
const { records } = res
pageData.baseManagement = []
pageData.baseManagement = records
})
}
function getCommonToolsList() {
NongChangAPI.commonToolsList({
status: 1,
}).then((res) => {
const { records } = res
pageData.commonTools = []
pageData.commonTools = records
})
}
function getAgricultureClassList() {
HomeAPI.agricultureClassList({
status: 1,
}).then((res) => {
const { records } = res
pageData.agricultureClass.videoList = records
pageData.agricultureClass.title = records[0]?.title
})
}
// 菜单点击事件
function onMenuItemClick(item: any) {
console.log('点击菜单项:', item)
......@@ -211,7 +279,7 @@
// 在这里添加具体的农业模型点击逻辑
// 打开模型详情页面
Navigate.to(model.link)
Navigate.to('/pages/nongyedamoxing/nongyedamoxing')
}
// 基地管理点击事件
......@@ -255,6 +323,18 @@
console.log('点击常用工具:', tool)
// 在这里添加具体的常用工具点击逻辑
}
// 轮播视频切换的时候触发
function handleChangeVideo(e: any) {
// console.log('切换视频', e.detail.current)
pageData.current = e.detail.current
pageData.agricultureClass.title = pageData.agricultureClass.videoList[pageData.current]?.title
}
// 获取视频时长
function handleMetadataLoaded(e: any) {
pageData.agricultureClass.time = e.target.duration
}
</script>
<template>
......@@ -273,15 +353,9 @@
v-for="item in pageData.menuItems"
:key="item.id"
class="codefun-flex-col codefun-items-center"
:class="{
'equal-division-item': item.id === 1,
'group_3 equal-division-item': item.id === 2 || item.id === 3,
'group_4 equal-division-item_2': item.id === 4,
'equal-division-item_3 group_5': item.id === 5,
}"
@click="onMenuItemClick(item)"
>
<image class="image_6" :src="item.icon" />
<image class="image_6" :src="item.icon_url" />
<text class="font_3 mt-13" :class="`text_${item.id + 2}`">{{ item.name }}</text>
</view>
</view>
......@@ -331,14 +405,14 @@
<view class="codefun-flex-row equal-division_3">
<template v-for="(model, index) in pageData.agricultureModels" :key="model.id">
<view class="codefun-flex-col equal-division-item_5 group_11">
<image class="codefun-self-center image_7" :src="model.image" />
<image class="codefun-self-center image_7" :src="model.icon_url" />
<text class="codefun-self-center font_5 text_18">{{ model.name }}</text>
<text class="codefun-self-center font_7 text_21">{{ model.description }}</text>
<text class="codefun-self-center font_7 text_21">{{ model.describes }}</text>
<view
class="codefun-flex-col codefun-justify-start codefun-items-center codefun-self-center text-wrapper_3"
@click="onAgricultureModelClick(model)"
>
<text class="font_8 text_24">{{ model.actionText }}</text>
<text class="font_8 text_24">查看介绍</text>
</view>
</view>
......@@ -387,14 +461,13 @@
<view
v-for="item in pageData.baseManagement"
:key="item.id"
class="codefun-flex-col codefun-items-start section_11 equal-division-item_7"
:class="{ 'ml-9': item.id > 1 }"
class="codefun-flex-col codefun-items-start section_11 equal-division-item_7 ml-9"
@click="onBaseManagementClick(item)"
>
<image :class="item.id === 1 ? 'image_10' : 'image_5'" :src="item.icon" />
<image class="image_5" :src="item.icon" />
<text class="font_11" :class="`text_${30 + item.id - 1}`">{{ item.name }}</text>
<view :class="`group_${15 + item.id}`">
<text class="font_12" :class="`text_${35 + item.id - 1}`">{{ item.value }}</text>
<view class="group_25">
<text class="font_12" :class="`text_${35 + item.id - 1}`">{{ item.num }}</text>
<text class="font_10" :class="`text_${35 + item.id + 3}`">{{ item.unit }}</text>
</view>
</view>
......@@ -561,6 +634,54 @@
<text class="font_6 text_43 text_67" @click="onViewMoreClass">查看更多</text>
</view>
<view class="codefun-flex-col section_20">
<fui-swiper-dot
:items="pageData.agricultureClass.videoList"
:current="pageData.current"
:styles="{
height: 10,
activeWidth: 40,
background: '#dff0e2',
activeBackground: '#5db66f',
bottom: 10,
}"
>
<swiper
class="fui-banner__wrap"
circular
:indicator-dots="false"
autoplay
:interval="4000"
:duration="150"
@change="handleChangeVideo"
>
<swiper-item v-for="(video, index) in pageData.agricultureClass.videoList" :key="index">
<video
:src="video.media_video"
:poster="video.cover_image"
:controls="false"
style="width: 654rpx; height: 358rpx"
@loadedmetadata="handleMetadataLoaded"
></video>
</swiper-item>
</swiper>
</fui-swiper-dot>
<view class="describe">
<text class="codefun-self-start font text_34">{{ pageData.agricultureClass.title }}</text>
<view
class="codefun-flex-row codefun-justify-between codefun-items-center codefun-self-stretch mt-13"
>
<!-- <view class="codefun-flex-row codefun-items-center">
<image
class="codefun-shrink-0 image_15"
src="/static/images/codefun/893f216142f5ca20cf9f2496d9b793c8.png"
/>
<text class="font_14 text_35 ml-5">{{ pageData.agricultureClass.expert }}</text>
</view> -->
<text class="font_14 text_36">{{ pageData.agricultureClass.time }}</text>
</view>
</view>
</view>
<!-- <view class="codefun-flex-col section_20">
<text class="codefun-self-start font_2 text_68">{{ pageData.agricultureClass.title }}</text>
<view
class="codefun-flex-row codefun-justify-between codefun-items-center codefun-self-stretch group_31"
......@@ -594,7 +715,7 @@
/>
</view>
</view>
</view>
</view> -->
</view>
</view>
</view>
......@@ -749,7 +870,10 @@
}
}
.section_3 {
padding: 16rpx 12rpx 16rpx;
display: flex;
justify-content: space-between;
align-items: center;
padding: 16rpx 24rpx 16rpx;
background-color: #ffffff;
border-radius: 16rpx;
mix-blend-mode: NOTTHROUGH;
......@@ -885,6 +1009,7 @@
margin-top: 16rpx;
text-align: center;
width: 160rpx;
height: 60rpx;
}
.text-wrapper_3 {
margin-top: 36rpx;
......@@ -1399,16 +1524,47 @@
.group_30 {
margin-top: 48rpx;
.section_20 {
position: relative;
margin-right: 28rpx;
padding: 272rpx 36rpx 22rpx 48rpx;
margin-top: 32.86rpx;
height: 418rpx;
// padding: 271.06rpx 36.64rpx 22rpx 48rpx;
padding: 20rpx;
padding-bottom: 0;
background-color: #ffffff;
border-radius: 16rpx;
mix-blend-mode: NOTTHROUGH;
background-image: url('/static/images/codefun/de7f2f0177d74c2b9c784b3825ea9832.png');
background-size: 94%;
background-repeat: no-repeat;
background-position-x: 20rpx;
background-position-y: 20rpx;
// background-image: url('/static/images/codefun/de7f2f0177d74c2b9c784b3825ea9832.png');
// background-size: 94%;
// background-repeat: no-repeat;
// background-position-x: 20rpx;
// background-position-y: 20rpx;
.fui-banner__item {
height: 358rpx;
border-radius: 20rpx;
}
.fui-banner__wrap {
height: 358rpx;
:deep(.uni-video-cover) {
.uni-video-cover-play-button {
width: 70rpx;
height: 70rpx;
line-height: 40rpx;
font-size: 56rpx;
}
}
}
.describe {
width: 88%;
position: absolute;
bottom: 52rpx;
left: 40rpx;
.text_34 {
color: #ffffff;
}
}
.text_68 {
line-height: 26.58rpx;
}
......@@ -1480,7 +1636,6 @@
}
.font {
font-size: 32rpx;
line-height: 29.32rpx;
color: #333333;
}
......
<script>
export default {
components: {},
props: {},
data() {
return {}
},
<script setup lang="ts">
import { reactive } from 'vue'
methods: {},
const pageData = reactive({
// 分类标签
categoryTabs: [
{ id: 1, name: '找农机' },
{ id: 2, name: '干农活' },
],
currentCategoryId: 1,
})
// 分类标签点击事件
function onCategoryTabClick(tab: any) {
console.log('点击分类标签:', tab)
pageData.currentCategoryId = tab.id
// 在这里添加具体的分类标签点击逻辑
}
</script>
......@@ -24,10 +32,17 @@
</view>
</view>
<view class="codefun-flex-row section_3">
<view class="codefun-flex-col codefun-justify-start codefun-items-center text-wrapper">
<text class="font_2 text_4">找农机</text>
<view
v-for="item in pageData.categoryTabs"
:key="item.id"
class="codefun-flex-col codefun-justify-start codefun-items-center text-50p"
:class="item.id === pageData.currentCategoryId ? 'text-wrapper' : ''"
@click="onCategoryTabClick(item)"
>
<text class="font_2" :class="item.id === pageData.currentCategoryId ? 'text_4' : 'text_5'">{{
item.name
}}</text>
</view>
<text class="codefun-self-start font_2 text_5 codefun-ml-56">干农活</text>
</view>
<view class="codefun-flex-col codefun-relative section_4">
<view class="codefun-flex-row group_6">
......@@ -272,18 +287,20 @@
background-color: #ffffff66;
border-radius: 32rpx;
border: solid 2rpx #ffffffcc;
.text-50p {
width: 50%;
height: 102rpx;
padding: 0.75rem 0 1.625rem;
}
.text-wrapper {
padding: 24rpx 0 56rpx;
background-color: #ffffff;
border-radius: 32rpx;
width: 348rpx;
height: 102rpx;
.text_4 {
line-height: 26.02rpx;
}
}
.text_5 {
margin-top: 24rpx;
color: #5db66f;
line-height: 25.82rpx;
}
......
<script>
export default {
components: {},
props: {},
data() {
return {}
},
methods: {},
}
</script>
<script setup lang="ts"></script>
<template>
<view class="codefun-flex-col page">
......
......@@ -37,9 +37,14 @@
})
// 查询金刚区数据
HomeAPI.zoneList().then((res) => {
console.log('HomeAPI.zoneList', res)
})
getServiceItems()
getMenuItems()
// 查询热门产地行情
getProductMarketList()
// 服务展示窗
getServiceStatsList()
// 农技课堂
getAgricultureClassList()
})
// 下拉刷新
......@@ -112,20 +117,10 @@
},
// 功能菜单
menuItems: [
{ id: 1, name: '农业政策', icon: '/static/images/codefun/4d9a15cf0dce9c5b1f274f99eb3e4718.png' },
{ id: 2, name: '灵活用工', icon: '/static/images/codefun/24864cd4c6f680714e327688c6ee9977.png' },
{ id: 3, name: '可信农资', icon: '/static/images/codefun/0c9b2418502708fc8414e7b2c04dc8e2.png' },
{ id: 4, name: '农机租购', icon: '/static/images/codefun/15059d8b705006d875ca9460b696a316.png' },
],
menuItems: [],
// 其他服务
serviceItems: [
{ id: 1, name: '惠农金融', icon: '/static/images/codefun/9f300d453071240f6f56ff6f83e223db.png' },
{ id: 2, name: '助农保险', icon: '/static/images/codefun/f422ac97718981ce225a7f595779f2be.png' },
{ id: 3, name: '品牌策划', icon: '/static/images/codefun/c0669727e6384083a7493979154183a9.png' },
{ id: 4, name: '农知农技', icon: '/static/images/codefun/182a345a5e2d417c944035b240ba2e64.png' },
],
serviceItems: [],
// 新闻资讯
newsItems: [
......@@ -136,68 +131,131 @@
// 农产品行情
productMarket: {
title: '热门产地行情',
updateTime: '08-30日更新',
// updateTime: '08-30日更新',
products: [
{ id: 1, name: '晚稻13号', price: '¥4120', change: '+1.2%', isUp: true },
{ id: 2, name: '晚稻9号', price: '¥3211', change: '+1.2%', isUp: true },
{ id: 3, name: '晚稻11号', price: '¥2120', change: '-1.2%', isUp: false },
// { id: 1, name: '晚稻13号', price: '¥4120', change: '+1.2%', isUp: true },
// { id: 2, name: '晚稻9号', price: '¥3211', change: '+1.2%', isUp: true },
// { id: 3, name: '晚稻11号', price: '¥2120', change: '-1.2%', isUp: false },
],
},
// 服务展示窗
serviceStats: [
{
id: 1,
name: '农场入驻',
value: '2,360',
unit: '个',
icon: '/static/images/codefun/15911306636a361a8dc16ce0283f3830.png',
},
{
id: 2,
name: '空闲农机',
value: '126',
unit: '台',
icon: '/static/images/codefun/1d0cd168eeffbaf37a90aa949c6ad806.png',
},
{
id: 3,
name: '产销对接',
value: '156',
unit: '笔',
icon: '/static/images/codefun/24dd00386672f240ef00394b746c2ff0.png',
},
{
id: 4,
name: '服务农户',
value: '12,580',
unit: '人',
icon: '/static/images/codefun/3fd6a50eaf22431687a6151df0581156.png',
},
{
id: 5,
name: '覆盖面积',
value: '268',
unit: 'km',
icon: '/static/images/codefun/87773a17a1b64dc686bf935708262002.png',
},
{
id: 6,
name: '覆盖区县',
value: '21',
unit: '个',
icon: '/static/images/codefun/329a4404092545f2924ad095c531cc66.png',
},
// {
// id: 1,
// name: '农场入驻',
// value: '2,360',
// unit: '个',
// icon: '/static/images/codefun/15911306636a361a8dc16ce0283f3830.png',
// },
// {
// id: 2,
// name: '空闲农机',
// value: '126',
// unit: '台',
// icon: '/static/images/codefun/1d0cd168eeffbaf37a90aa949c6ad806.png',
// },
// {
// id: 3,
// name: '产销对接',
// value: '156',
// unit: '笔',
// icon: '/static/images/codefun/24dd00386672f240ef00394b746c2ff0.png',
// },
// {
// id: 4,
// name: '服务农户',
// value: '12,580',
// unit: '人',
// icon: '/static/images/codefun/3fd6a50eaf22431687a6151df0581156.png',
// },
// {
// id: 5,
// name: '覆盖面积',
// value: '268',
// unit: 'km',
// icon: '/static/images/codefun/87773a17a1b64dc686bf935708262002.png',
// },
// {
// id: 6,
// name: '覆盖区县',
// value: '21',
// unit: '个',
// icon: '/static/images/codefun/329a4404092545f2924ad095c531cc66.png',
// },
],
// 农技课堂
agricultureClass: {
title: '专家实录—鸡饲养技术',
expert: '张教授',
info: '23:15|2.3万次播放',
// expert: '张教授',
time: '',
videoList: [],
},
current: 0,
})
function getServiceItems() {
HomeAPI.zoneList({
pageNo: 1,
pageSize: 4,
status: 1,
type: 1,
}).then((res) => {
const { records } = res
pageData.serviceItems = []
pageData.serviceItems = records
})
}
function getMenuItems() {
HomeAPI.zoneList({
pageNo: 1,
pageSize: 4,
status: 1,
type: 2,
}).then((res) => {
const { records } = res
pageData.menuItems = []
pageData.menuItems = records
})
}
function getProductMarketList() {
HomeAPI.productMarketList({
status: 1,
}).then((res) => {
const { records } = res
console.log(res)
pageData.productMarket.products = records
pageData.productMarket.products.forEach((item: any) => {
switch (item.tendency) {
case 1:
item.isUp = true
break
case 2:
item.isUp = false
break
}
})
})
}
function getServiceStatsList() {
HomeAPI.serviceStatsList({
status: 1,
}).then((res) => {
const { records } = res
pageData.serviceStats = records
})
}
function getAgricultureClassList() {
HomeAPI.agricultureClassList({
status: 1,
}).then((res) => {
const { records } = res
pageData.agricultureClass.videoList = records
pageData.agricultureClass.title = records[0]?.title
})
}
// 菜单点击事件
function onMenuItemClick(item: any) {
console.log('点击菜单项:', item)
......@@ -215,6 +273,18 @@
console.log('查看全部农技课堂')
// 在这里添加具体的查看逻辑
}
// 轮播视频切换的时候触发
function handleChangeVideo(e: any) {
// console.log('切换视频', e.detail.current)
pageData.current = e.detail.current
pageData.agricultureClass.title = pageData.agricultureClass.videoList[pageData.current]?.title
}
// 获取视频时长
function handleMetadataLoaded(e: any) {
pageData.agricultureClass.time = e.target.duration
}
</script>
<template>
......@@ -326,29 +396,32 @@
<view class="codefun-flex-col codefun-relative section_5">
<view class="codefun-flex-row">
<view
v-show="item.status"
v-for="item in pageData.menuItems"
:key="item.id"
class="codefun-flex-col codefun-items-center group_10"
@click="onMenuItemClick(item)"
>
<image class="image_11" :src="item.icon" />
<image class="image_11" :src="item.icon_url" />
<text class="font_2 mt-11">{{ item.name }}</text>
</view>
</view>
<view class="codefun-flex-col group_11 codefun-mt-20">
<view class="codefun-flex-row group_38">
<image
v-show="service.status"
v-for="service in pageData.serviceItems"
:key="service.id"
class="image_12"
:class="{
'ml-43': service.id > 1,
}"
:src="service.icon"
:src="service.icon_url"
/>
</view>
<view class="codefun-flex-row codefun-justify-between mt-13">
<text
v-show="service.status"
v-for="service in pageData.serviceItems"
:key="service.id"
class="font_2"
......@@ -381,7 +454,7 @@
</view>
<view class="codefun-flex-row codefun-justify-between codefun-items-baseline group_12">
<text class="font_6">{{ pageData.productMarket.title }}</text>
<text class="font_7 text_22">{{ pageData.productMarket.updateTime }}</text>
<!-- <text class="font_7 text_22">{{ pageData.productMarket.updateTime }}</text> -->
</view>
<view class="codefun-flex-row equal-division section_8">
<view
......@@ -395,16 +468,11 @@
}"
>
<view
class="codefun-flex-col codefun-justify-start codefun-items-start codefun-self-center codefun-relative"
:class="{
group_41: index === 0,
group_20: index === 1,
group_1: index === 2,
}"
class="codefun-flex-col codefun-justify-start codefun-items-start codefun-self-center codefun-relative group_1"
>
<text class="font_8 text_23">{{ product.name }}</text>
<text class="font_9" :class="`pos${index > 0 ? `_${index + 1}` : ''}`">{{
product.price
<text class="font_9 text_23" :class="`pos${index > 0 ? `_${index + 1}` : ''}`">{{
product.current_price
}}</text>
</view>
<view
......@@ -430,7 +498,7 @@
text_26: !product.isUp,
}"
>
{{ product.change }}
{{ `${product.percent}%` }}
</text>
</view>
<view
......@@ -449,20 +517,10 @@
<view
v-for="stat in pageData.serviceStats"
:key="stat.id"
class="codefun-flex-col section_12"
:class="{
section_18: stat.id === 1,
section_1: stat.id === 2,
section_19: stat.id > 2,
}"
class="codefun-flex-col section_12 section_19"
>
<view
class="codefun-flex-row codefun-justify-center codefun-items-center codefun-self-stretch codefun-relative"
:class="{
group_25: stat.id === 1,
group_26: stat.id === 2,
group_27: stat.id > 2,
}"
class="codefun-flex-row codefun-justify-center codefun-items-center codefun-self-stretch codefun-relative group_27"
>
<image class="image_5 mr-1" :class="`pos_${stat.id}`" :src="stat.icon" />
<text
......@@ -471,22 +529,9 @@
>{{ stat.name }}</text
>
</view>
<view
class="codefun-flex-row codefun-justify-center codefun-items-baseline mt-11"
:class="{
group_28: stat.id === 1,
group_18: stat.id === 2,
group_30: stat.id > 2,
}"
>
<text class="font_12" :class="`text_${stat.id === 1 ? 47 : stat.id === 2 ? 48 : 37}`">{{
stat.value
}}</text>
<text
class="font_7"
:class="`text_${stat.id === 1 ? 49 : stat.id === 2 ? '' : stat.id > 4 ? 31 : 31}`"
>{{ stat.unit }}</text
>
<view class="codefun-flex-row codefun-justify-center codefun-items-baseline mt-11 group_30">
<text class="font_12 text_37">{{ stat.num }}</text>
<text class="font_7 text_31">{{ stat.unit }}</text>
</view>
</view>
</view>
......@@ -495,31 +540,50 @@
<text class="font_7 text_33" @click="onViewMoreClass">查看全部</text>
</view>
<view class="codefun-flex-col section_13">
<text class="codefun-self-start font text_34">{{ pageData.agricultureClass.title }}</text>
<view
class="codefun-flex-row codefun-justify-between codefun-items-center codefun-self-stretch mt-13"
<fui-swiper-dot
:items="pageData.agricultureClass.videoList"
:current="pageData.current"
:styles="{
height: 10,
activeWidth: 40,
background: '#dff0e2',
activeBackground: '#5db66f',
bottom: 10,
}"
>
<view class="codefun-flex-row codefun-items-center">
<image
class="codefun-shrink-0 image_15"
src="/static/images/codefun/893f216142f5ca20cf9f2496d9b793c8.png"
/>
<text class="font_14 text_35 ml-5">{{ pageData.agricultureClass.expert }}</text>
</view>
<text class="font_14 text_36">{{ pageData.agricultureClass.info }}</text>
</view>
<view class="codefun-flex-row codefun-justify-center codefun-self-stretch mt-13">
<view class="section_14" />
<view
class="codefun-flex-col codefun-justify-start codefun-items-center image-wrapper codefun-ml-8"
<swiper
class="fui-banner__wrap"
circular
:indicator-dots="false"
autoplay
:interval="4000"
:duration="150"
@change="handleChangeVideo"
>
<image class="image_16" src="/static/images/codefun/d2f4116cc0ab402e57bdbd7aa4dead94.png" />
</view>
<view class="section_15 codefun-ml-8" />
<swiper-item v-for="(video, index) in pageData.agricultureClass.videoList" :key="index">
<video
:src="video.media_video"
:poster="video.cover_image"
:controls="false"
style="width: 654rpx; height: 358rpx"
@loadedmetadata="handleMetadataLoaded"
></video>
</swiper-item>
</swiper>
</fui-swiper-dot>
<view class="describe">
<text class="codefun-self-start font text_34">{{ pageData.agricultureClass.title }}</text>
<view
class="codefun-flex-col codefun-justify-start codefun-items-center image-wrapper codefun-ml-8"
class="codefun-flex-row codefun-justify-between codefun-items-center codefun-self-stretch mt-13"
>
<image class="image_16" src="/static/images/codefun/d2f4116cc0ab402e57bdbd7aa4dead94.png" />
<!-- <view class="codefun-flex-row codefun-items-center">
<image
class="codefun-shrink-0 image_15"
src="/static/images/codefun/893f216142f5ca20cf9f2496d9b793c8.png"
/>
<text class="font_14 text_35 ml-5">{{ pageData.agricultureClass.expert }}</text>
</view> -->
<text class="font_14 text_36">{{ pageData.agricultureClass.time }}</text>
</view>
</view>
</view>
......@@ -885,7 +949,8 @@
margin-right: 28rpx;
margin-top: 32.72rpx;
.group_13 {
flex: 1 1 231.34rpx;
flex: 0 0 33.33%;
text-align: center;
.group_41 {
padding: 10rpx 0 4.92rpx;
width: 106rpx;
......@@ -919,7 +984,7 @@
color: #333333;
}
.text_23 {
width: 124rpx;
width: 100%;
}
.font_9 {
font-size: 36rpx;
......@@ -928,7 +993,7 @@
}
.group_1 {
padding: 10rpx 0 4.92rpx;
width: 106rpx;
// width: 106rpx;
.text_24 {
color: #5db66f;
}
......@@ -1002,7 +1067,7 @@
.equal-division_2 {
margin-top: 32.9rpx;
.section_12 {
flex: 1 1 216rpx;
flex: 0 0 calc(33.33% - 14rpx);
.group_25 {
padding: 5.24rpx 0 4.8rpx;
.pos_4 {
......@@ -1090,7 +1155,7 @@
}
.group_16 {
flex-wrap: wrap;
gap: 10px;
gap: 20rpx;
justify-content: center;
align-items: center;
margin-right: 10px;
......@@ -1117,17 +1182,44 @@
color: #333333;
}
.section_13 {
position: relative;
margin-right: 28rpx;
margin-top: 32.86rpx;
padding: 271.06rpx 36.64rpx 22rpx 48rpx;
height: 418rpx;
// padding: 271.06rpx 36.64rpx 22rpx 48rpx;
padding: 20rpx;
padding-bottom: 0;
background-color: #ffffff;
border-radius: 16rpx;
mix-blend-mode: NOTTHROUGH;
background-image: url('/static/images/codefun/de7f2f0177d74c2b9c784b3825ea9832.png');
background-size: 94%;
background-repeat: no-repeat;
background-position-x: 20rpx;
background-position-y: 20rpx;
// background-image: url('/static/images/codefun/de7f2f0177d74c2b9c784b3825ea9832.png');
// background-size: 94%;
// background-repeat: no-repeat;
// background-position-x: 20rpx;
// background-position-y: 20rpx;
.fui-banner__item {
height: 358rpx;
border-radius: 20rpx;
}
.fui-banner__wrap {
height: 358rpx;
:deep(.uni-video-cover) {
.uni-video-cover-play-button {
width: 70rpx;
height: 70rpx;
line-height: 40rpx;
font-size: 56rpx;
}
}
}
.describe {
width: 88%;
position: absolute;
bottom: 52rpx;
left: 40rpx;
}
.text_34 {
line-height: 26.58rpx;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论