基于mpvue实现的cnode社区demo(附精选源码32套,涵盖商城团购等)

社区类目没有开放给个人开发者,所以没能上线。

预览

在这里插入图片描述
在这里插入图片描述
项目配置文件,更改appid

{"description": "项目配置文件","setting": {"urlCheck": true,"es6": false,"postcss": false,"minified": false,"newFeature": true},"miniprogramRoot": "./dist/","compileType": "miniprogram","appid": "","projectname": "mpvue","condition": {"search": {"current": -1,"list": []},"conversation": {"current": -1,"list": []},"game": {"currentL": -1,"list": []},"miniprogram": {"current": -1,"list": []}}
}

网络请求封装

const BASE_URL = 'https://cnodejs.org/api/v1'
export default {// 发出请求时的回调函数config(config) {config.url = BASE_URL + config.url// 请求前设置token// const accesstoken = wx.getStorageSync('accesstoken')// if (accesstoken) {//   config.header = {//     'X-Token': accesstoken//   }// }console.log('request before config: ', config);// 必须返回OBJECT参数对象,否则无法发送请求到服务端this.showLoading({title: '加载中',mask: true,})return config;},// 请求成功后的回调函数async success(resp) {let errorMesg = resp.data.error_msg || ''// 可以在这里对收到的响应数据对象进行加工处理switch (resp.statusCode) {// case 200://   const { success, error_msg: message } = resp.data//   if (!success) {//     errorMesg = message || '未知错误'//   }//   break// case 401://   console.log('未登陆,拦截重定向登陆界面')//   await this.redirectTo({//     url: 'login'//   })//   breakcase 403:console.log('未授权接口,拦截')this.showModal({title: '警告',content: (resp.data.error && (resp.data.error.details || resp.data.error.message)) || '无权请联系管理员',confirmText: '我知道了',showCancel: false,})throw new Error(errorMesg)case 500:case 502:errorMesg = (resp.data.error && (resp.data.error.details || resp.data.error.message)) || '服务器出错'breakcase 503:errorMesg = '哦~服务器宕机了'break}if (errorMesg.length > 0) {this.showToast({title: errorMesg,icon: 'none',})// throw new Error(errorMesg)}return resp.data.data || resp.data},// 请求失败后的回调函数fail(resp) {console.log('request fail: ', resp);// 必须返回响应数据对象,否则后续无法对响应数据进行处理this.showToast({title: resp.errMsg,icon: 'none',})return resp;},// 请求完成时的回调函数(请求成功或失败都会被执行)complete(resp) {this.hideLoading()},}

主体代码

<style lang="less" scoped>
@import url("../../utils/vars");
.tabs {padding: 20rpx;.label {font-size: 30rpx;color: @maincolor;background: transparent;&.active {color: white;background: @maincolor;}}
}
.user-info {padding: 20rpx;.btn-login {color: #666;font-size: 26rpx;}.user-avatar {width: 50rpx;height: 50rpx;border-radius: 50%;}
}
</style><template><div class="container"><div class="flex ai-center jc-between"><div class="tabs"><text class="label" v-for="(title,tab) in tabs" :key="tab" :class="{'active':currentTab===tab}" @click="switchTab(tab)">{{title}}</text></div><div class="user-info"><img class="user-avatar" v-if="avatarUrl" :src="avatarUrl" /><text class="btn-login" v-else @click="getUserInfo">登陆</text></div></div><topic-cell v-for="(t,i) in topics" :key="i" :topic="t"></topic-cell></div>
</template><script>
import TopicCell from '@/components/TopicCell'
import { mapState, mapActions } from 'vuex'export default {components: {TopicCell,},data() {return {page: 1,currentTab: 'all',tabs: {'all': '全部','good': '精华','share': '分享','ask': '问答','job': '招聘',},}},computed: {...mapState({topics: state => state.topics.topics,avatarUrl: state => state.userInfo.avatar_url,}),},methods: {...mapActions({getTopics: 'topics/getTopics',getUserInfo: 'userInfo/getUserInfo',}),async getMore() {// 每隔一定数据量清空一次列表, 因为小程序限制数据量的传入const refresh = this.topics.length >= 100await this.getTopics({page: ++this.page,tab: this.currentTab,refresh,})// 回到顶部if (refresh) {wx.pageScrollTo({ scrollTop: 0, duration: 300 })}},async switchTab(tab) {await this.getTopics({page: this.page = 1,refresh: true,tab: this.currentTab = tab,})},},created() {this.getTopics({page: 1,tab: this.currentTab,refresh: true, // 是否刷新列表, false表示添加到列表, 不能用page===1代替})const storagedaccesstoken = wx.getStorageSync('accesstoken')storagedaccesstoken && this.getUserInfo({ storagedaccesstoken })},onReachBottom() {this.getMore()},async onPullDownRefresh() {await this.getTopics({page: 1,tab: this.currentTab,refresh: true,})wx.stopPullDownRefresh()},
}
</script>

TopicCell组件代码:

<template functional><div class="cell" @click="goDetail"><img class="user_avatar" :src="topic.author.avatar_url"><text class="label active" v-if="topic.top">置顶</text><text class="label active" v-else-if="topic.good">精华</text><text class="label" v-else-if="topic.tab==='ask'">问答</text><text class="label" v-else-if="topic.tab==='job'">招聘</text><text class="label" v-else>分享</text><text class="reply_count">{{topic.reply_count}}/{{topic.visit_count}}</text><text>{{topic.title}}</text></div>
</template><script>
export default {props: ['topic'],methods: {goDetail() {wx.navigateTo({url: '/pages/topicdetail/topicdetail?id=' + this.topic.id,})},},
}
</script><style lang="less">
.cell {padding: 10px;font-size: 28rpx;// margin-bottom: 10rpx;.user_avatar {width: 40rpx;height: 40rpx;// margin-bottom: -4rpx;margin-right: 10rpx;vertical-align: middle;}.reply_count {font-size: 20rpx;color: #b4b4b4;vertical-align: middle;}& + .cell {border-top: 1rpx solid #ddd;}
}
</style>

本地运行

 # 代码获取关注微信公众号【码农园区】,获取【uniapp源码】即可获取# 在`project.config.json`下修改你的`appid`# 将`https://cnodejs.org`添加到request合法域名列表# 切换到项目目录cd mpvue-cnode# 安装依赖npm i# 启动脚本npm run dev# 然后用微信开发者工具打开本项目根目录即可。

其它脚本

# eslint 检查
npm run lint# eslint 自动修复
npm run fix# 生产环境 build
npm run build

说明

如果本项目对您有帮助,欢迎 “点赞,关注” 支持一下 谢谢~

源码获取关注公众号「码农园区」,回复 【uniapp源码】
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

预览功能实现

需求&#xff1a;将后端返回来的文字或者图片和视频展示在页面上。 <!-- 预览 --><el-dialog title"预览" :visible.sync"dialogPreviewVisible" width"50%" append-to-body :close-on-click-modal"false" close"Previe…

.NET6实现破解Modbus poll点表配置文件

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 Modbus 协议是工控领域常见…

如何使用 Java 在Excel中创建下拉列表

下拉列表&#xff08;下拉框&#xff09;可以确保用户仅从预先给定的选项中进行选择&#xff0c;这样不仅能减少数据输入错误&#xff0c;还能节省时间提高效率。在MS Excel中&#xff0c;我们可以通过 “数据验证” 提供的选项来创建下拉列表&#xff0c;但如果要在Java程序中…

通过预定义颜色查找表上色_vtkLookupTable_vtkColorTransferFunction

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;通过颜色查找表给vtkPlaneSource上色 第一种技术是使用预定义颜色的查找表vtkLookupTable。这包括创建一个查找表并为其分配一组已命名的…

ctfshow刷题web入门--1--ljcsd

文章目录 ctf.show。信息搜集web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20。爆破。知识1.1 播种随机数生成器-mt_srand。参考web21--重点web22--做不出来web23web24web25web26web27web28。。。命令执行。知识1 绕过正则表达式…

基础课12——深度学习

深度学习技术是机器学习领域中的一个新的研究方向&#xff0c;它被引入机器学习使其更接近于最初的目标——人工智能。深度学习的最终目标是让机器能够像人一样具有分析学习能力&#xff0c;能够识别文字、图像和声音等数据。 深度学习的核心思想是通过学习样本数据的内在规律…

skywalking告警UI界面有告警信息,webhook接口没有回调,400错误

400错误就是回调接口返回数据的属性对应不上 PostMapping(“/webhook”) public void webhook(RequestBody List alarmMessageList) 自定义的实体类AlarmMessage有问题 只能去官网找了 告警实体类官网 Getter EqualsAndHashCode RequiredArgsConstructor NoArgsConstructor(fo…

Vue基础入门(三):Vue3的使用

Vue3的使用 一、首页案例修改 修改首页的信息&#xff1a;是在之前介绍的HelloWorld.vue文件中进行内容的修改。 页面展示效果&#xff1a; 此时就看到了我们新添加的文字了&#xff01; 同样的我们开发代码的时候只需要修改了项目中的内容然后保存就会自动刷新的浏览器&…

如何确定先做哪件事情。

问题描述&#xff1a;工作或者生活中&#xff0c;有许多件事情&#xff0c;我们应该先做那件事情。 解决办法&#xff1a;重要紧急的四象限法则。具体如下所示&#xff1a; -----------------------------------------------------------------------------------------------…

使用elementPlus去除下拉框蓝色边框

// 下拉框去除蓝色边框 .el-select {--el-select-input-focus-border-color: none !important; }

汽车电子 -- 车载ADAS之RCTA(后方横向来车预警 )

国际标准: RCTA: GB/T XXXXX—XXXX 乘用车后部交通穿行提示系统性能要求及试验方法 一、后方横向来车预警RCTA&#xff08; Rear Cross Traffic Assist&#xff09; 在车辆倒车时&#xff0c;实时监测车辆后方横向接近的其它道路使用者&#xff0c;并在可能发生碰撞危险时发…

微信小程序推送服务号消息(一)【Go+微信小程序+微信服务号+微信开放平台】

一、需求场景 业务需要给微信小程序用户在某些场景推送微信服务号消息&#xff0c;例如&#xff1a;订单即将超时&#xff0c;电子合同签约超时等&#xff1b; 二、开发准备 1、开通微信服务号 入口&#xff1a;微信公众平台 1.1 在服务号中获取推送消息所需的配置信息&#…