Files
yimo-resource-blog/pages/index.vue
王鹏 a47c6dd47a init
2025-08-14 15:04:24 +08:00

606 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="">
<image style="position: relative;z-index: 1;" class="fengrui-img" src="https://img.yidaima.cn/feast/index_bj.jpg"
mode="aspectFill"></image>
<view style="position: relative;z-index: 2;" class="index-box">
<view class="notice-box">
<image class="notice-svg" src="https://img.yidaima.cn/feast/zt.svg" mode=""></image>
<view class="notice-text">
<p>{{noticeStr}}</p>
</view>
</view>
<!-- 轮播图 -->
<carousel :img-list="swiperData" url-key="url" @selected="selectedBanner"/>
<!-- <uni-swiper-dot class="uni-swiper-dot-box" :info="swiperData" :current="current" field="content">
<swiper autoplay :circular="true" interval="2000" class="swiper-box" :current="swiperDotIndex"
@change="changeSwiper">
<swiper-item v-for="(item, index) in swiperData" :key="index">
<view class="swiper-item" @click="clickBannerItem(item)">
<image :src="item.image" mode="aspectFill" :draggable="false" />
</view>
</swiper-item>
</swiper>
</uni-swiper-dot> -->
<view class="index-info">
<view class="mt30 grid text-center col-4 bg-white" style="padding: 30rpx 0; border-radius: 15rpx;row-gap: 30rpx;">
<view @click="Jump('/pages/tool/highQualityCode')">
<image class="cell_3_icon flex justify-center align-center" style="height:65rpx;" src="https://img.yidaima.cn/feast/sjbz.png" mode="aspectFit">
</image>
<view>精品源码</view>
</view>
<view @click="Jump('/pages/tool/resource')">
<image class="cell_3_icon flex justify-center align-center" style="height: 65rpx;" src="https://img.yidaima.cn/feast/dnbz.png" mode="aspectFit">
</image>
<view>资源分享</view>
</view>
<view @click="Jump('/pages/tool/video')">
<image class="cell_3_icon flex justify-center align-center" style="height: 65rpx;" src="https://img.yidaima.cn/feast/sp.png" mode="aspectFit">
</image>
<view>演示视频</view>
</view>
<view @click="Jump('/pages/tool/freeCode')">
<image class="cell_3_icon flex justify-center align-center" style="height: 65rpx;" src="https://img.yidaima.cn/feast/sycc.png" mode="aspectFit">
</image>
<view>免费源码</view>
</view>
</view>
<view class="titel-vi">
<view class="titel-vi-q">
<view class="titel-vi-img">
<image class="notice-ioc" src="https://img.yidaima.cn/feast/zxwz.svg" mode="aspectFill"></image>
</view>
<view class="titel-vi-font">最新文章</view>
</view>
<view class="titel-vi-right" @tap="categoryNew()">
查看更多
</view>
</view>
<!-- 文章列表 -->
<view class="blog-box" v-for="(item,index) in blogList" :key="index" @click="blogInfo(item.id)">
<view v-show="false" style="height: 370rpx;background-color: white;overflow: hidden;padding: 25rpx;border-radius: 30rpx;" v-if="item.ad == 1 && adUnitId2">
<view style="height: 325rpx;overflow: hidden;">
<ad-custom style="height: 325rpx !important" :unit-id="adUnitId2" ad-intervals="30" ></ad-custom>
</view>
</view>
<view style="height: 240rpx;" v-else>
<!-- <image class="blog-img" :src="baseUrl+item.showImg"></image> -->
<image class="blog-img" :src="item.showImg"></image>
<view class="info-box">
<view class="ellipsis-multiline">
{{item.title}}
</view>
<view class="info-icon">
<image v-if="item.isAd == 0" class="muen-sld-icon" src="https://img.yidaima.cn/feast/guanggao.svg" mode=""></image>
<image v-if="item.appResourceId" class="muen-sld-icon" src="https://img.yidaima.cn/feast/xiazai.svg" mode=""></image>
<image v-if="item.weight == 999" class="muen-sld-icon2" src="https://img.yidaima.cn/feast/top.svg" mode=""></image>
</view>
<view class="muen-sld-time"><text style="float: left;">{{item.createTime}}</text>
<text class="cuIcon-attention look-number"><text>{{item.lookNumber}}</text></text></view>
</view>
</view>
</view>
</view>
</view>
<!-- 加载动图 -->
<view class="artileload" v-if="showTotal">
<image style="width: 100%;height: 100%;" src="https://img.yidaima.cn/feast/articleload.gif" mode="aspectFit"></image>
</view>
<!-- 文章列表没有数据 -->
<view class="no-list-data" v-else>
--我的底线就到这里了--
</view>
<!--通知弹窗-->
<view class="cu-modal" :class="modalName=='indexModal'?'show':''">
<view style="border-radius: 30rpx;" class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view style="color: black;font-size: 38rpx;margin-top: 50rpx;" class="content">通知</view>
</view>
<view class=" bg-white">
<view style="font-size: 33rpx;color: #6a6a6a;padding: 40rpx 60rpx 60rpx 60rpx;">
{{modalInfo}}
</view>
<button @tap="hideModal" style="margin-bottom: 50rpx;width: 55%;height: 90rpx;font-size: 38rpx;"
class="cu-btn bg-green">确认</button>
</view>
</view>
</view>
<view class="cu-modal" :class="modalName=='Nomini'?'show':''">
<view style="border-radius: 30rpx;" class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view style="color: black;font-size: 38rpx;margin-top: 50rpx;" class="content">提示</view>
</view>
<view class=" bg-white">
<view style="font-size: 33rpx;color: #6a6a6a;padding: 40rpx 60rpx 60rpx 60rpx;">
请您使用手机访问谢谢 !
</view>
<button @tap="offApp" style="margin-bottom: 50rpx;width: 55%;height: 90rpx;font-size: 38rpx;"
class="cu-btn bg-green">知道了</button>
</view>
</view>
</view>
</view>
</template>
<script>
import {
getConfigKey
} from "@/api/app/public.js"
import {
listArticle,newUser,wxLogin,autoLoginWx,getSysSet
} from "@/api/app/index.js"
import {
getQiniuToken
} from "@/utils/qiniu.js"
import {
getToken,setToken
} from '@/utils/auth'
import carousel from '@/components/lun-bo-tu/lun-bo-tu';
import config from '@/config'
let interstitialAd = null
export default {
components: {
carousel
},
data() {
return {
baseUrl: config.baseUrl,
adUnitId:"",
adUnitId2:"",
TabCur: 0,
scrollLeft: 0,
current: 0,
swiperDotIndex: 0,
swiperData: [],
noticeStr:"",
blogList:[],
queryParams: {
pageNum: 1,
pageSize: 6,
isShow: 1
},
total:0,
showTotal:false,
modalName:null,
modalInfo:"",
platform: 0
}
},
onShareAppMessage() {
return {
title: "同学快过来看!这里有一个能搜资源的好东西!",
imageUrl: "",
path: 'pages/index?userid='+this.userid,
}
},
onShareTimeline(){
return {
title:'同学快过来看!这里有一个能搜资源的好东西!',
query:{
},
imageUrl:''
}
},
onLoad(option) {
var that = this;
this.adUnitId2 = uni.getStorageSync("sysSet").computerAd
wx.getSystemInfo({
success: (res) => {
console.log(res.platform)
if (res.platform == 'mac' || res.platform == 'windows') {
this.platform = 1
// that.modalName = 'Nomini'
// return;
}
}
})
//自动登录
uni.login({
provider: 'weixin',
success: loginRes => {
//获取openid
autoLoginWx(loginRes.code).then(response => {
var antoInfo = JSON.parse(response.msg)
var data = {
openId: antoInfo.openid,
oldUserId : 0
}
//邀请用户
if(option.userid && option.userid != 'undefined'){
data.oldUserId = option.userid
}
//登录
wxLogin(data).then(logininfo => {
setToken(logininfo.token)
//设置用户信息
this.$store.dispatch('GetInfo').then(res => {
})
})
})
}
});
//获取系统配置数据
getSysSet().then(setinfo => {
//设置缓存
uni.setStorageSync("sysSet", setinfo)
//公告
that.noticeStr = setinfo.indexNotice
//弹窗通知是否关闭
var isModalOff = setinfo.indexModalInfo.split("#")[0]
//弹窗通知内容
that.modalInfo = setinfo.indexModalInfo.split("#")[1]
//判断弹窗
if(isModalOff == "true" && uni.getStorageSync("isIndexModal") != that.modalInfo){
that.modalName = "indexModal"
uni.setStorageSync("isIndexModal", that.modalInfo)
}
//轮播图
that.swiperData = []
var swiper = setinfo.indexSwiper.split(",")
for(var i=0; i < swiper.length; i++){
that.swiperData.push({image:swiper[i]})
}
})
//获取文章列表
this.getBlogList()
//初始化插屏广告
that.adUnitId = uni.getStorageSync("sysSet").homeAd
this.getWxchaAd()
},
// 上了分页
onReachBottom() {
var that = this;
var allTotal = this.queryParams.pageNum * this.queryParams.pageSize
//this.page为加载次数this.pageSize为每一次加载的数据条数
if (allTotal < this.total) {
//this.total为请求数据的总条数。只要现有条数小于总条数就执行一下代码
this.showTotal = true;
this.queryParams.pageNum++;
//加载次数递加
//请求更多数据列表
listArticle(this.queryParams).then(response => {
if(that.platform == 0 && that.adUnitId2){
that.blogList.push({ad:1})
}
that.blogList = that.blogList.concat(response.rows)
var allTotal2 = this.queryParams.pageNum * this.queryParams.pageSize
if (allTotal2 < this.total) {
//this.total为请求数据的总条数。只要现有条数小于总条数就执行一下代码
this.showTotal = true;
} else {
this.showTotal = false;
}
})
} else {
this.showTotal = false;
}
},
methods: {
offApp(){
uni.exitMiniProgram({
success: function () {
console.log("=")
},
fail: function (err) {
console.log(err)
}
});
},
// 插屏广告数据
getWxchaAd: function() {
var that = this;
//#ifdef MP-WEIXIN
if (this.adUnitId != '') {
// 在页面onLoad回调事件中创建插屏广告实例
if (wx.createInterstitialAd) {
interstitialAd = wx.createInterstitialAd({
adUnitId: this.adUnitId
})
interstitialAd.onLoad(() => {
})
interstitialAd.onError((err) => {})
interstitialAd.onClose(() => {})
}
// 在适合的场景显示插屏广告
if (interstitialAd) {
interstitialAd.show().catch((err) => {
console.error(err)
})
}
} else {
console.log('没有流量主')
}
//#endif
},
categoryNew(){
uni.switchTab({
url: '/pages/search/index'
});
},
getBlogList(){
var that = this;
listArticle(this.queryParams).then(response => {
that.blogList = response.rows
var allTotal = this.queryParams.pageNum * this.queryParams.pageSize
that.total = response.total
if (allTotal < this.total) {
this.showTotal = true;
} else {
this.showTotal = false;
}
if(that.platform == 0 && that.adUnitId2){
that.blogList.splice(3, 0, {ad:1});
}
})
},
tabSelect(e) {
this.TabCur = e.currentTarget.dataset.id;
this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60
},
clickBannerItem(item) {
console.log(item)
},
changeSwiper(e) {
this.current = e.detail.current
},
blogInfo(id){
this.$tab.navigateTo('/pages/blog/bloginfo?id='+id)
},
Jump(url){
this.$tab.navigateTo(url)
},
hideModal() {
this.modalName = null
},
}
}
</script>
<style lang="scss">
/* 列表没有数据 */
.no-list-data {
text-align: center;
margin: 30rpx 0px;
color: #e6e6e6;
font-size: 24upx;
}
/* 加载动图 */
.artileload {
height: 80rpx;
width: 80rpx;
margin: 20rpx auto;
overflow: hidden;
}
.look-number {
font-size: 22rpx;
float: right;
}
.look-number text {
margin-left: 10rpx;
}
.blog-box {
width: 100%;
background-color: white;
border-radius: 18rpx;
margin-bottom: 20rpx;
}
.blog-img {
height: 200rpx;
width: 43%;
margin-top: 20rpx;
margin-left: 25rpx;
border-radius: 18rpx;
display: inline-block;
float: left;
}
.muen-sld-time {
font-size: 22rpx;
margin-top: 20rpx;
margin-left: 25rpx;
float: left;
color: #ADADAD;
width: 100%;
line-height: 20rpx;
}
.muen-sld-icon {
width: 35rpx;
height: 35rpx;
margin-left: 25rpx;
margin-top: 23rpx;
float: left;
}
.muen-sld-icon2 {
width: 43rpx;
height: 43rpx;
margin-left: 25rpx;
margin-top: 20rpx;
float: left;
}
.info-box {
width: 48%;
display: inline-block;
}
.ellipsis-multiline {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
margin-top: 32rpx;
margin-left: 25rpx;
height: 72rpx;
}
.info-icon {
height: 55rpx;
}
/* 标题 */
.titel-vi-right {
color: #989898;
height: 80upx;
line-height: 80upx;
font-size: 20upx;
}
.titel-vi-font {
font-size: 30upx;
margin-left: 24upx;
}
.titel-vi-img {
width: 36upx;
height: 36upx;
}
.titel-vi {
display: flex;
justify-content: space-between;
align-items: center;
margin: 10upx 30upx 0upx 30upx;
}
.titel-vi-q {
display: flex;
justify-content: flex-start;
align-items: center;
}
.notice-box {
width: 100%;
margin-top: 50rpx;
margin-bottom: 30rpx;
}
.notice-ioc {
height: 40upx;
width: 140upx;
display: inline-block;
float: left;
}
.notice-svg {
height: 50upx;
width: 100upx;
display: inline-block;
float: left;
margin-top: -1rpx;
}
.notice-text {
display: inline-block;
margin-left: 5rpx;
margin-top: 10rpx;
width: 435upx;
overflow: hidden;
white-space: nowrap;
box-sizing: border-box;
border-radius: 20rpx;
}
.notice-text p {
display: inline-block;
padding-left: 100%;
animation: marquee 15s linear infinite;
}
@keyframes marquee {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
.index-info {
z-index: 1;
margin-left: 20rpx;
margin-right: 20rpx;
margin-top: 15rpx;
}
.index-box {
z-index: 1;
margin-top: -370rpx;
}
.fengrui-img {
width: 100%;
}
/* #ifndef APP-NVUE */
page {
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: #F7F7F7;
min-height: 100%;
height: auto;
}
view {
font-size: 14px;
line-height: inherit;
}
/* #endif */
.swiper {
height: 300rpx;
}
.swiper-box {
height: 150px;
overflow: hidden;
border-radius: 30rpx;
transform: translateY(0);
}
.swiper-item {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: center;
align-items: center;
color: #fff;
height: 300rpx;
line-height: 300rpx;
}
@media screen and (min-width: 500px) {
.uni-swiper-dot-box {
width: 400px;
/* #ifndef APP-NVUE */
margin: 0 auto;
/* #endif */
margin-top: 8px;
}
.image {
width: 100%;
}
}
</style>