Browse Source

政策解读详情-在线课程文章

master
ZhaoYang 4 weeks ago
parent
commit
8d63c3b056
  1. 4
      pages/home/home.js
  2. 2
      pages/home/home.wxml
  3. 42
      pagesB/pages/policyElucidation/policyElucidation.js
  4. 80
      pagesB/pages/policyElucidation/policyElucidation.wxml
  5. 130
      pagesB/pages/policyElucidation/policyElucidation.wxss
  6. 50
      pagesB/pages/training/training.js
  7. 48
      pagesB/pages/training/training.wxml
  8. 1
      pagesB/pages/training/training.wxss
  9. 31
      utils/api.js

4
pages/home/home.js

@ -1,10 +1,10 @@
import http from '../../utils/api' import http from '../../utils/api'
const baseUr = require('../../utils/baseUrl')
const baseUrl = require('../../utils/baseUrl')
Page({ Page({
data: { data: {
// 轮播图数据 // 轮播图数据
currentSwiper: 0, currentSwiper: 0,
baseUr: baseUr,
baseUrl: baseUrl,
swiperList: [], swiperList: [],
// 通知公告数据 // 通知公告数据

2
pages/home/home.wxml

@ -18,7 +18,7 @@
<block wx:for="{{swiperList}}" wx:key="id"> <block wx:for="{{swiperList}}" wx:key="id">
<swiper-item> <swiper-item>
<view class="swiper-item {{item.isActive ? 'active' : ''}}" data-value="{{item}}" catchtap="onSwiperTap"> <view class="swiper-item {{item.isActive ? 'active' : ''}}" data-value="{{item}}" catchtap="onSwiperTap">
<image src="{{baseUr+item.imageUrl}}" class="swiper-image" mode="aspectFill" />
<image src="{{baseUrl+item.imageUrl}}" class="swiper-image" mode="aspectFill" />
<view class="swiper-mask"></view> <view class="swiper-mask"></view>
<view class="swiper-content"> <view class="swiper-content">
<text class="swiper-tag">{{item.adsType}}</text> <text class="swiper-tag">{{item.adsType}}</text>

42
pagesB/pages/policyElucidation/policyElucidation.js

@ -1,3 +1,5 @@
import http from '../../../utils/api'
// policy-interpretation.js // policy-interpretation.js
Page({ Page({
data: { data: {
@ -182,10 +184,21 @@ Page({
}, },
onLoad: function(options) { onLoad: function(options) {
// 初始化时显示所有政策
this.setData({
filteredPolicies: this.data.allPolicies
});
this.getpolicyelucidation()
},
// 政策解读列表
getpolicyelucidation(){
http.policyelucidation({
data:{},
success:res=>{
console.log(111111,res);
this.setData({
filteredPolicies:res.rows
})
}
})
}, },
// 搜索输入处理 // 搜索输入处理
@ -250,14 +263,19 @@ Page({
// 政策卡片点击 // 政策卡片点击
onPolicyTap: function(e) { onPolicyTap: function(e) {
const policyId = e.currentTarget.dataset.id; const policyId = e.currentTarget.dataset.id;
const policy = this.data.allPolicies.find(p => p.id === policyId);
if (policy) {
this.setData({
currentPolicy: policy,
showPolicyDetail: true
});
}
http.policyeDetails({
data:{
id:policyId
},
success:res=>{
console.log(333,res);
this.setData({
showPolicyDetail: true,
currentPolicy: res.data
})
}
})
}, },
// 隐藏政策详情 // 隐藏政策详情

80
pagesB/pages/policyElucidation/policyElucidation.wxml

@ -1,4 +1,3 @@
<!-- policy-interpretation.wxml -->
<view class="container"> <view class="container">
<!-- 头部区域 --> <!-- 头部区域 -->
<view class="header"> <view class="header">
@ -70,18 +69,16 @@
<block wx:for="{{filteredPolicies}}" wx:key="id"> <block wx:for="{{filteredPolicies}}" wx:key="id">
<view class="policy-card" data-id="{{item.id}}" bindtap="onPolicyTap"> <view class="policy-card" data-id="{{item.id}}" bindtap="onPolicyTap">
<view class="policy-header"> <view class="policy-header">
<view class="policy-tag {{item.type}}">{{item.typeText}}</view>
<view class="policy-date">{{item.date}}</view>
<view class="policy-tag {{item.type}}">{{item.policyCategory}}</view>
<view class="policy-date">{{item.releaseDate}}</view>
</view> </view>
<view class="policy-title">{{item.title}}</view> <view class="policy-title">{{item.title}}</view>
<view class="policy-content">
<text class="policy-summary">{{item.summary}}</text>
</view>
<view class="policy-footer"> <view class="policy-footer">
<view class="policy-source">{{item.source}}</view>
<view class="policy-source">{{item.issuingAgency}}</view>
<image class="policy-arrow" src="/pagesB/images/you.png" mode=""/> <image class="policy-arrow" src="/pagesB/images/you.png" mode=""/>
</view> </view>
</view> </view>
@ -100,89 +97,29 @@
<view class="policy-info-row"> <view class="policy-info-row">
<view class="info-item"> <view class="info-item">
<text class="info-label">政策类型:</text> <text class="info-label">政策类型:</text>
<text class="info-value">{{currentPolicy.typeText}}</text>
<text class="info-value">{{currentPolicy.policyCategory}}</text>
</view> </view>
<view class="info-item"> <view class="info-item">
<text class="info-label">发布日期:</text> <text class="info-label">发布日期:</text>
<text class="info-value">{{currentPolicy.date}}</text>
<text class="info-value">{{currentPolicy.releaseDate}}</text>
</view> </view>
<view class="info-item"> <view class="info-item">
<text class="info-label">发布单位:</text> <text class="info-label">发布单位:</text>
<text class="info-value">{{currentPolicy.source}}</text>
<text class="info-value">{{currentPolicy.issuingAgency}}</text>
</view> </view>
</view> </view>
<view class="section">
<view class="section-title">政策要点</view>
<view class="section-content">
<block wx:for="{{currentPolicy.keyPoints}}" wx:key="index">
<view class="key-point">{{index + 1}}. {{item}}</view>
</block>
</view>
</view>
<view class="section"> <view class="section">
<view class="section-title">详细解读</view> <view class="section-title">详细解读</view>
<view class="section-content"> <view class="section-content">
<text class="interpretation-text">{{currentPolicy.interpretation}}</text>
</view>
</view>
<view class="section">
<view class="section-title">适用对象</view>
<view class="section-content">
<view class="applicable-objects">
<block wx:for="{{currentPolicy.applicableObjects}}" wx:key="index">
<view class="object-tag">{{item}}</view>
</block>
</view>
</view>
</view>
<view class="section">
<view class="section-title">申报指南</view>
<view class="section-content">
<block wx:for="{{currentPolicy.applicationGuide}}" wx:key="index">
<view class="guide-item">
<view class="guide-step">{{index + 1}}</view>
<view class="guide-text">{{item}}</view>
</view>
</block>
</view>
</view>
<view class="section">
<view class="section-title">专家建议</view>
<view class="section-content">
<view class="expert-advice">
<view class="advice-header">
<image class="expert-avatar" src="/images/expert.png"></image>
<view class="expert-info">
<text class="expert-name">张农业</text>
<text class="expert-title">农业政策研究员</text>
</view>
</view>
<view class="advice-content">{{currentPolicy.expertAdvice}}</view>
</view>
</view>
</view>
<view class="section">
<view class="section-title">相关链接</view>
<view class="section-content">
<block wx:for="{{currentPolicy.relatedLinks}}" wx:key="index">
<view class="link-item" bindtap="onLinkTap" data-url="{{item.url}}">
<text class="link-text">{{item.name}}</text>
<image class="link-icon" src="/images/link.png"></image>
</view>
</block>
<rich-text class="interpretation-text" space="emsp" nodes="{{currentPolicy.issuingAgency}}"></rich-text>
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
<view class="modal-footer"> <view class="modal-footer">
<button class="btn btn-secondary" bindtap="hidePolicyDetail">关闭</button> <button class="btn btn-secondary" bindtap="hidePolicyDetail">关闭</button>
<button class="btn btn-primary" bindtap="onSavePolicy">收藏此政策</button>
</view> </view>
</view> </view>
</view> </view>
@ -190,6 +127,5 @@
<!-- 底部导航提示 --> <!-- 底部导航提示 -->
<view class="bottom-tip"> <view class="bottom-tip">
<text class="tip-text">已加载 {{filteredPolicies.length}} 条政策解读</text> <text class="tip-text">已加载 {{filteredPolicies.length}} 条政策解读</text>
<text class="tip-text">数据仅供参考,具体以官方发布为准</text>
</view> </view>
</view> </view>

130
pagesB/pages/policyElucidation/policyElucidation.wxss

@ -1,4 +1,3 @@
/* policy-interpretation.wxss */
.container { .container {
min-height: 100vh; min-height: 100vh;
background-color: #f5f7fa; background-color: #f5f7fa;
@ -129,6 +128,8 @@
font-size: 22rpx; font-size: 22rpx;
padding: 6rpx 20rpx; padding: 6rpx 20rpx;
border-radius: 20rpx; border-radius: 20rpx;
background-color: #e8f4ea;
color: #1a5f23;
} }
.policy-tag.financial { .policy-tag.financial {
@ -157,22 +158,14 @@
} }
.policy-title { .policy-title {
font-size: 32rpx;
font-size: 30rpx;
font-weight: bold; font-weight: bold;
color: #333; color: #333;
margin-bottom: 20rpx; margin-bottom: 20rpx;
line-height: 1.4; line-height: 1.4;
} }
.policy-summary {
font-size: 28rpx;
color: #666;
line-height: 1.5;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.policy-footer { .policy-footer {
display: flex; display: flex;
@ -287,8 +280,6 @@
} }
.policy-info-row { .policy-info-row {
display: flex;
flex-wrap: wrap;
background-color: #f9f9f9; background-color: #f9f9f9;
border-radius: 12rpx; border-radius: 12rpx;
padding: 20rpx; padding: 20rpx;
@ -296,7 +287,6 @@
} }
.info-item { .info-item {
width: 50%;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
@ -352,108 +342,12 @@
text-align: justify; text-align: justify;
} }
.applicable-objects {
display: flex;
flex-wrap: wrap;
gap: 20rpx;
}
.object-tag {
background-color: #f0f9ff;
color: #1a5b8c;
font-size: 24rpx;
padding: 10rpx 20rpx;
border-radius: 20rpx;
}
.guide-item {
display: flex;
align-items: flex-start;
margin-bottom: 25rpx;
}
.guide-step {
width: 40rpx;
height: 40rpx;
background-color: #2d8c3c;
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24rpx;
margin-right: 20rpx;
flex-shrink: 0;
}
.guide-text {
flex: 1;
line-height: 1.5;
}
.expert-advice {
background-color: #f9f9f9;
border-radius: 12rpx;
padding: 25rpx;
}
.advice-header {
display: flex;
align-items: center;
margin-bottom: 20rpx;
}
.expert-avatar {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
margin-right: 20rpx;
}
.expert-info {
display: flex;
flex-direction: column;
}
.expert-name {
font-size: 28rpx;
font-weight: bold;
color: #333;
}
.expert-title {
font-size: 24rpx;
color: #999;
margin-top: 5rpx;
}
.advice-content {
font-size: 26rpx;
color: #666;
line-height: 1.6;
}
.link-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 0;
border-bottom: 1rpx solid #eee;
}
.link-item:last-child {
border-bottom: none;
}
.link-text {
font-size: 28rpx;
color: #1a5f23;
}
.link-icon {
width: 30rpx;
height: 30rpx;
}
.modal-footer { .modal-footer {
display: flex; display: flex;
@ -478,11 +372,7 @@
color: #666; color: #666;
border:1px solid rgb(243, 241, 241); border:1px solid rgb(243, 241, 241);
} }
.btn-primary {
background-color: #2d8c3c;
color: white;
}
/* 底部提示 */ /* 底部提示 */
.bottom-tip { .bottom-tip {

50
pagesB/pages/training/training.js

@ -1,11 +1,12 @@
// pages/training/training.js
import http from '../../../utils/api'
const baseUrl = require('../../../utils/baseUrl')
Page({ Page({
data: { data: {
currentTab: 0, currentTab: 0,
searchKeyword: '', searchKeyword: '',
articleActiveCategory: 'all',
articleActiveCategory: 0,
videoActiveCategory: 'all', videoActiveCategory: 'all',
baseUrl:baseUrl,
// 文章数据 // 文章数据
articles: [ articles: [
{ {
@ -249,11 +250,42 @@ Page({
onLoad() { onLoad() {
// 初始化数据 // 初始化数据
this.setData({ this.setData({
filteredArticles: this.data.articles,
// filteredArticles: this.data.articles,
filteredVideos: this.data.videos filteredVideos: this.data.videos
}); });
this.getarticle()
this.getarticleZd()
}, },
// 文章列表
getarticle(){
http.article({
data:{},
success:res=>{
console.log(1111,res);
this.setData({
filteredArticles:res.rows
})
}
})
},
// 文章字典
getarticleZd(){
http.articleZd({
data:{
dictType:'article_category'
},
success:res=>{
console.log(2222,res);
this.setData({
wzzd:res.rows
})
}
})
},
// 切换主选项卡 // 切换主选项卡
switchTab(e) { switchTab(e) {
const tab = parseInt(e.currentTarget.dataset.tab); const tab = parseInt(e.currentTarget.dataset.tab);
@ -292,11 +324,11 @@ Page({
// 选择文章分类 // 选择文章分类
selectArticleCategory(e) { selectArticleCategory(e) {
const category = e.currentTarget.dataset.category;
this.setData({ articleActiveCategory: category });
this.setData({
filteredArticles: this.filterArticles(this.data.searchKeyword, category)
});
console.log(3333,e);
const category = Number(e.currentTarget.dataset.category);
this.setData({
articleActiveCategory: category
});
}, },
// 选择视频分类 // 选择视频分类

48
pagesB/pages/training/training.wxml

@ -53,43 +53,20 @@
<scroll-view class="category-scroll" scroll-x scroll-with-animation> <scroll-view class="category-scroll" scroll-x scroll-with-animation>
<view class="category-list"> <view class="category-list">
<view <view
class="category-item {{articleActiveCategory === 'all' ? 'active' : ''}}"
class="category-item {{articleActiveCategory === 0 ? 'active' : ''}}"
bindtap="selectArticleCategory" bindtap="selectArticleCategory"
data-category="all"
data-category="0"
> >
<text>全部</text> <text>全部</text>
<view class="category-indicator"></view> <view class="category-indicator"></view>
</view> </view>
<view <view
class="category-item {{articleActiveCategory === 'tech' ? 'active' : ''}}"
bindtap="selectArticleCategory"
data-category="tech"
>
<text>技术干货</text>
<view class="category-indicator"></view>
</view>
<view
class="category-item {{articleActiveCategory === 'business' ? 'active' : ''}}"
class="category-item {{item.dictSort === articleActiveCategory? 'active' : ''}}"
bindtap="selectArticleCategory" bindtap="selectArticleCategory"
data-category="business"
data-category="{{item.dictSort}}"
wx:for="{{wzzd}}"
> >
<text>商业思维</text>
<view class="category-indicator"></view>
</view>
<view
class="category-item {{articleActiveCategory === 'management' ? 'active' : ''}}"
bindtap="selectArticleCategory"
data-category="management"
>
<text>管理技能</text>
<view class="category-indicator"></view>
</view>
<view
class="category-item {{articleActiveCategory === 'career' ? 'active' : ''}}"
bindtap="selectArticleCategory"
data-category="career"
>
<text>职业发展</text>
<text>{{item.dictLabel}}</text>
<view class="category-indicator"></view> <view class="category-indicator"></view>
</view> </view>
</view> </view>
@ -103,11 +80,10 @@
wx:key="id" wx:key="id"
bindtap="viewArticleDetail" bindtap="viewArticleDetail"
data-id="{{item.id}}" data-id="{{item.id}}"
animation="{{item.animation}}"
> >
<!-- 封面图片 --> <!-- 封面图片 -->
<view class="article-cover-container"> <view class="article-cover-container">
<image class="article-cover" src="{{item.cover}}" mode="aspectFill"></image>
<image class="article-cover" src="{{baseUrl+item.coverImage}}" mode="aspectFill"></image>
<view class="cover-overlay"></view> <view class="cover-overlay"></view>
<view class="category-tag">{{item.category}}</view> <view class="category-tag">{{item.category}}</view>
<view class="article-hover-effect"></view> <view class="article-hover-effect"></view>
@ -116,23 +92,23 @@
<!-- 文章信息 --> <!-- 文章信息 -->
<view class="article-info"> <view class="article-info">
<view class="article-title">{{item.title}}</view> <view class="article-title">{{item.title}}</view>
<view class="article-desc">{{item.description}}</view>
<view class="article-desc">{{item.subtitle}}</view>
<view class="article-meta"> <view class="article-meta">
<view class="meta-item"> <view class="meta-item">
<image class="meta-icon" src="/pages/images/tx.png"></image>
<text class="meta-text">{{item.author}}</text>
<image class="meta-icon" src="{{baseUrl+item.expertAvatar}}"></image>
<text class="meta-text">{{item.expertName}}</text>
</view> </view>
<view class="meta-item"> <view class="meta-item">
<text class="meta-text">{{item.date}}</text>
<text class="meta-text">{{item.publishTime}}</text>
</view> </view>
</view> </view>
<view class="article-stats"> <view class="article-stats">
<view class="stat-item"> <view class="stat-item">
<image class="stat-icon" src="/pagesB/images/lll.png"></image> <image class="stat-icon" src="/pagesB/images/lll.png"></image>
<text>{{item.likes}}</text>
<text>{{item.viewCount}}</text>
</view> </view>
</view> </view>
</view> </view>

1
pagesB/pages/training/training.wxss

@ -620,6 +620,7 @@
width: 30rpx; width: 30rpx;
height: 30rpx; height: 30rpx;
transition: all 0.3s ease; transition: all 0.3s ease;
border-radius: 50%;
} }
.meta-item:active .meta-icon { .meta-item:active .meta-icon {

31
utils/api.js

@ -96,10 +96,37 @@ function tipList(params) {
http('/system/tip/list', 'get', params) http('/system/tip/list', 'get', params)
} }
// 在线培训文章发布
function article(params) {
http('/vet/knowledge/published/list', 'get', params)
}
// 文章分类字典
function articleZd(params) {
http('/system/dict/data/list', 'get', params)
}
// 在线培训文章发布详情
function articleDetails(params) {
http('/vet/knowledge/published/' + params.data.id, 'get', params)
}
// 政策解读列表
function policyelucidation(params) {
http('/system/interpretation/published/list', 'get', params)
}
// 政策解读详情
function policyeDetails(params) {
http('/system/interpretation/published/' + params.data.id, 'get', params)
}
export default { // 暴露接口 export default { // 暴露接口
login,carousel,disaster,pharmacy,guidance,getPhoneNumber,inquiry,
login,carousel,disaster,pharmacy,guidance,getPhoneNumber,inquiry,policyeDetails,
search,trend,feed,sales,wzd,wzdxq,wzdAdd,expertsList,recommendationList, search,trend,feed,sales,wzd,wzdxq,wzdAdd,expertsList,recommendationList,
recommendationXq,queryList,tipList
recommendationXq,queryList,tipList,article,articleDetails,articleZd,policyelucidation
} }
Loading…
Cancel
Save