日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用uniapp开发社区交友网站的项目教程

發(fā)布時間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用uniapp开发社区交友网站的项目教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

uniapp社區(qū)交友開發(fā)前端模塊開發(fā)

源碼可以提供下載,詳情訪問末尾碼云地址

環(huán)境搭建和創(chuàng)建項目

開發(fā)環(huán)境搭建

  • 使用HubilderX
  • 安裝對應插件

創(chuàng)建uniapp項目

  • 創(chuàng)建項目(名稱:社區(qū)交友)
  • 真機調(diào)試或微信開發(fā)者工具調(diào)試

App.vue引入全局公共樣式

引入官方css樣式庫

  • 新建模板項目hello uniapp

  • 復制模板common下的css

  • 在本項目的app.vue進行引入css文件 @import “./common/uni.css ” (還要引入uni.tff文件,否則報錯)

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xizHMjdI-1649380676444)(uniapp社區(qū)交友開發(fā).assets/image-20220322164136184-16479384973031.png)]

引入自定義圖標

  • 阿里巴巴矢量圖標庫 https://www.iconfont.cn/

  • 下載所選圖標至項目打包 得到壓縮文件

  • 修改icon.css文件去掉url,引入文件 測試圖標使用

    <view><text class="iconfont icon-smile" style="font-size: 100rpx; color: red;"></text> </view>

引入css動畫庫

  • 下載animate.css

  • 引入animate.css

  • 測試css動畫庫的使用

    <view style="display: flex;justify-content: center;padding: 50rpx;"> <view class="" hover-class=" animated rubberBand" style="border: 1rpx solid black; padding: 20rpx;">點擊效果</view></view>

設置全局屬性globalStyle

  • 解析page.json文件 看官方文檔

  • 設置導航欄的樣式

    "globalStyle": {"navigationBarTextStyle": "black", //導航欄字體顏色"navigationBarTitleText": "社區(qū)交友",//導航欄文字"navigationBarBackgroundColor": "#FFF",//背景顏色"backgroundColor": "#FFF"}

底部導航開發(fā)

  • 設置圖標(圖片為png,81*81)用矢量圖標庫下載

  • 配置tabBar前提要配置pages數(shù)組頁面

    "pages": [ //pages數(shù)組中第一項表示應用啟動頁,參考:https://uniapp.dcloud.io/collocation/pages{"path": "pages/index/index","style": {}},{"path" : "pages/news/news","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}},{"path" : "pages/msg/msg","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}},{"path" : "pages/my/my","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}}],"tabBar": {"color": "#323232","selectedColor": "#FC5C82","backgroundColor": "#FFF","borderStyle": "black","list": [{"pagePath": "pages/index/index","text": "首頁","iconPath": "static/tabbar/index.png","selectedIconPath": "static/tabbar/indexed.png"},{"pagePath": "pages/news/news","text": "動態(tài)","iconPath": "static/tabbar/news.png","selectedIconPath": "static/tabbar/newsed.png"},{"pagePath": "pages/msg/msg","text": "消息","iconPath": "static/tabbar/paper.png","selectedIconPath": "static/tabbar/papered.png"},{"pagePath": "pages/my/my","text": "我的","iconPath": "static/tabbar/home.png","selectedIconPath": "static/tabbar/homeed.png"}]}

uni-app和vuejs基礎快速上手

view和text組件和動畫的使用

  • hover-class的測試使用
  • text的測試使用
  • 兩個內(nèi)置組件的使用可參考官方文檔

uniapp的css3選擇器

  • 普通的選擇器 id就用#,class就用.,什么都不加默認全部

  • 父級下的子級菜單的選擇器

    .box>view:first-of-type{background-color: red; } .box>view:last-of-type{background-color: pink; } .box>view:nth-child(2){background-color: yellow; }

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SvOmDgZ5-1649380676446)(uniapp社區(qū)交友開發(fā).assets/image-20220323110150462-16480045116861.png)]

  • 奇偶選擇器

    //奇數(shù)選擇器 .box>view:nth-of-type(odd){background-color: red; } //偶數(shù)選擇器 .box>view:nth-of-type(even){background-color: green; } //偶數(shù)選擇器 .box:nth-of-type(even){background-color: green; }

flex布局快速入手

  • display:flex 外層使用,塊內(nèi)元素擠在一行內(nèi)
  • justify-content:常用center,水平居中
  • align-items:常用center,垂直居中
  • felx-direction:改變排序方式,從行轉換成列
  • felx-shirink:0 不被壓縮
  • flex:1占一份 2占兩份

數(shù)據(jù)渲染

  • {{}}獲取data中的數(shù)據(jù)渲染
  • @tap觸發(fā)點擊事件

class和style的綁定

  • 綁定class用冒號:class
  • :class={‘class1’:isActive}
  • s:tyle=" {‘color’: Color,‘font-size’:num+‘px’}"

條件渲染

  • v-if的使用
  • v-show是會渲染只是不顯示
  • 一般在template里面用v-if

列表渲染

  • v-for
  • 官方文檔建議v-for寫在

事件處理器

  • @tap點擊事件
  • @tap.stop點里面不會觸發(fā)外面的事件

監(jiān)聽屬性

  • watch

  • 測試

    <template><view><view>{{num}}</view><button @tap="changNum()">按鈕</button></view> </template><script>export default {data() {return {num:0}},watch:{num(val){console.log(val);}},methods: {changNum(){this.num++;}}} </script><style> button{background: blue;display: flex;justify-content: center;align-items: center;font-size: 15px;color: white; } </style>

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Gyz1MrF9-1649380676447)(uniapp社區(qū)交友開發(fā).assets/image-20220323154220758-16480213421241.png)]

計算屬性

  • 常用于數(shù)據(jù)的格式化

  • computed

  • 測試運用

    <template><view>{{formatWeight}}</view> </template><script>export default {data() {return {weight:2100}},computed:{formatWeight(){return (this.weight>1000)?this.weight/1000+'kg':this.weight+'g';}}} </script><style></style>

首頁開發(fā)

page.json配置

  • 導航欄配置根據(jù)官方文檔配置

    {"path": "pages/index/index","style": {"app-plus": {// 導航欄配置"titleNView":{// 搜索框配置"searchInput":{"align":"center","backgroundColor":"#F5F4F2","borderRadius":"4px","disabled":true,"placeholder":"搜索帖子","placeholderColor":"#6D6C67"},"buttons":[{"color":"#333333","colorPressed":"#FD597C","float":"right","fontSize":"20px","fontSrc":"/static/iconfont.ttf","text":"\ue668"}]}}}}
  • 用真機調(diào)試成功,微信開發(fā)者工具旁邊無顯示

圖文列表樣式

  • 封裝free.css把常用樣式封裝 如==flex:display;justify-content:center;algin-items:center、

  • 引入自定義css庫

  • 列表開發(fā)

    <view style="padding: 20rpx;"><view class="flex;justify-between;align-center"><!-- 頭像,昵稱 --><view class="flex;align-center"><!-- 頭像 --><image src="/static/common//nothing.png" class="mr-1; rounded" style="width:65rpx;height:65rpx"></image><view><view style="font-size: 30rpx;">昵稱</view><view style="color: #9d9589;font-size: 20rpx;">2022-3-15</view></view></view ><!-- 按鈕 --><view class="flex;align-center; justify-center" style="background: #FF4A6A; width:90rpx; height:50rpx;color: white;" >關注</view></view><!-- 文章內(nèi)容 --><view>哈哈哈</view><!-- 圖片 --><view class="mt-1" ><image src="/static/demo/datapic/45.jpg" style="width: 100%; height: 350rpx;" lazy-load="true"></image></view><!-- 按鈕 --><view class="flex" ><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-dianzan2 "></view><view>贊</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-cai; mr-2" ></view><view>踩</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-pinglun2; mr-2" ></view><view>評論</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-zhuanfa1; mr-2" ></view><view>轉發(fā)</view></view></view></view>

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-daoAQo1N-1649380676447)(uniapp社區(qū)交友開發(fā).assets/image-20220323193232107.png)]

封裝列表樣式

  • 繼續(xù)使用free.css封裝代碼

    <view><view class="p-2"><view class="flex;justify-between;align-center"><!-- 頭像,昵稱 --><view class="flex;align-center"><!-- 頭像 --><image src="/static/common//nothing.png" class="mr-1; rounded-circle" style="width:65rpx;height:65rpx"></image><view><view class="font" style="line-height: 1.5;">昵稱</view><view style=" ine-height: 1.5;" class="font-small; text-light-muted">2022-3-15</view></view></view ><!-- 按鈕 --><view class="flex;align-center; justify-center; rounded; text-white; bg-main" style=" width:90rpx; height:50rpx;" >關注</view></view><!-- 文章內(nèi)容 --><view class="font-md; my-1">我是標題</view><!-- 圖片 --><view class="mt-1" ><image src="/static/demo/datapic/45.jpg" class="rounded" style="width: 100%; height: 350rpx;" lazy-load="true"></image></view><!-- 按鈕 --><view class="flex" ><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-dianzan2 "></view><view>贊</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-cai; mr-2" ></view><view>踩</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-pinglun2; mr-2" ></view><view>評論</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-zhuanfa1; mr-2" ></view><view>轉發(fā)</view></view></view></view></view>
  • 封裝本項目公共css(common.css 記得引入)

    .bg-main{background: #FF4A6A; }
  • 封裝成組件動態(tài)渲染

    <block v-for="(item,index) in list" :key="index"><commonList :item="item" :index="index" ></commonList></block>import commonList from '@/components/common/common-list';components:{commonList},<view class="p-2"><view class="flex;justify-between;align-center"><!-- 頭像,昵稱 --><view class="flex;align-center"><!-- 頭像 --><image :src="item.userPic" class="mr-1; rounded-circle" style="width:65rpx;height:65rpx"></image><view><view class="font" style="line-height: 1.5;">{{item.username}}</view><view style=" ine-height: 1.5;" class="font-small; text-light-muted">{{item.newstime}}</view></view></view ><!-- 按鈕 --><view class="flex;align-center; justify-center; rounded; text-white; bg-main" style=" width:90rpx; height:50rpx;" >關注</view></view><!-- 文章內(nèi)容 --><view class="font-md; my-1">{{item.title}}</view><!-- 圖片 --><view class="mt-1" ><image :src="item.titlePic" class="rounded" style="width: 100%; height: 350rpx;" lazy-load="true"></image></view><!-- 按鈕 --><view class="flex" ><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-dianzan2; mr-2"></view><view>{{item.support.support_count}}</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-cai; mr-2" ></view><view>{{item.support.unsupport_count}}</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-pinglun2; mr-2" ></view><view>{{item.comment_count}}</view></view><view class="flex;align-center; justify-center flex-1"><view class="iconfont icon-zhuanfa1; mr-2" ></view><view>{{item.share_num}}</view></view></view></view>export default{props:{item:Object,key:Number}}

全局分割線開發(fā)

  • 封裝組件divider.vue

    <!-- 分割線樣式 --><view style="height: 15rpx; background-color: #F5F5F4;"></view>
  • 引入全局組件(分割線常用)

    import divider from '@/components/common/divider.vue'; Vue.component('divider',divider);<block v-for="(item,index) in list" :key="index"><commonList :item="item" :index="index"></commonList><divider></divider> </block>

優(yōu)化列表組件-動畫特效

  • 圖片顯示優(yōu)化
  • 關注、圖標的點擊動畫特效(jello)
  • 圖標主色調(diào)變化 加字體顏色
  • 為各元素添加click事件 (頭像、關注、標題、圖片、點贊、踩)
<template><view><view class="p-2"><view class="flex;justify-between;align-center"><!-- 頭像,昵稱 --><view class="flex;align-center"><!-- 頭像 --><image :src="item.userPic" class="mr-1; rounded-circle" style="width:65rpx;height:65rpx" @click="openSapce()"></image><view><view class="font" style="line-height: 1.5;">{{item.username}}</view><view style=" ine-height: 1.5;" class="font-small; text-light-muted">{{item.newstime}}</view></view></view><!-- 按鈕 --><view class="flex;align-center; justify-center; rounded; text-white; bg-main; animated faster "style=" width:90rpx; height:50rpx;" hover-class="rubberBand" @click="follow()">關注</view></view><!-- 文章內(nèi)容 --><view class="font-md; my-1" @click="openDetail()" >{{item.title}}</view><!-- 圖片 --><view class="mt-1" v-if="item.titlePic" @click="openDetail()"><image :src="item.titlePic" class="rounded" style="width: 100%; height: 350rpx;" lazy-load="true"></image></view><!-- 按鈕 --><view class="flex"><view class="flex;align-center; justify-center flex-1 animated faster" hover-class="jello text-main" @click="doSupport('support')"><view class="iconfont icon-dianzan2; mr-2;"></view><view>{{item.support.support_count}}</view></view><view class="flex;align-center; justify-center flex-1 animated faster" hover-class="jello text-main" @click="doSupport('unsupport')"><view class="iconfont icon-cai; mr-2 "></view><view>{{item.support.unsupport_count}}</view></view><view class="flex;align-center; justify-center flex-1 animated faster" hover-class="jello text-main" @click="openDetail()"><view class="iconfont icon-pinglun2; mr-2"></view><view>{{item.comment_count}}</view></view><view class="flex;align-center; justify-center flex-1 animated faster" hover-class="jello text-main" @click="openDetail()"><view class="iconfont icon-zhuanfa1; mr-2"></view><view>{{item.share_num}}</view></view></view></view></view> </template><script>export default {props: {item: Object,index: Number},methods:{openSapce(){console.log("打開個人空間");},follow(){console.log("關注");},openDetail(){console.log("打開詳情頁");},doSupport(type){console.log(type);}}} </script><style> </style>

優(yōu)化列表組件-關注功能

  • 關注按鈕的顯示
  • 子組件觸發(fā)父組件方法更新isFollowz
<view class="flex;align-center; justify-center; rounded; text-white; bg-main; animated faster "style=" width:90rpx; height:50rpx;" hover-class="rubberBand" @click="follow()" v-if="!item.isFollow">關注</view>follow(){// 觸發(fā)父級follow方法this.$emit('follow',this.index);},<commonList :item="item" :index="index" @follow="follow(index)"></commonList>methods: {follow(index){this.list[index].isFollow=true;uni.showToast({title:'關注成功'})}}

優(yōu)化列表組件-頂踩功能

  • 綁定class渲染
  • 方法參數(shù)傳遞
  • 父方法實現(xiàn)
<view class="flex;align-center; justify-center flex-1 animated faster" hover-class="jello text-main" @click="doSupport('support')":class="item.support.type==='support'?'support-active':''"><view class="iconfont icon-dianzan2; mr-2;"></view><view>{{item.support.support_count>0?item.support.support_count:'支持'}}</view></view>doSupport(type){this.$emit('doSupport',{type:type,index:this.index})}<commonList :item="item" :index="index" @follow="follow" @doSupport="doSupport"></commonList>doSupport(e) {let obj=this.newList[this.tabIndex].list[e.index]console.log(obj);if (obj.support.type === '') {//無操作obj.support[e.type + '_count']++;} else if (obj.support.type === 'support' && e.type === 'unsupport') {//之前是頂,頂減一,踩加一obj.support.support_count--;obj.support.unsupport_count++;} else if (obj.support.type === 'unsupport' && e.type === 'support') {//之前是踩,頂加一,踩減一obj.support.support_count++;obj.support.unsupport_count--;}obj.support.type = e.type;let msg = e.type === 'support' ? '頂' : '踩';uni.showToast({title: msg + '成功'})},

滾動tab導航開發(fā)

  • 頂部導航選項卡

    <scroll-view class="scroll-row border-bottom" scroll-x="true" :scroll-into-view="scrollInto" scroll-with-animation="true"><view v-for="(item,index) in tabBars" :key="index" class="scroll-row-item px-3 py-2 font-md " :id="'tab'+index":class="tabIndex===index?'text-main font-lg font-weight-bold':''" @click="doTab(index)">{{item.name}}</view></scroll-view>tabIndex:0,scrollInto:'',tabBars:[{name:'首頁'},{name:'體育'},{name:'軍事'},{name:'熱點'},{name:'新聞'},{name:'娛樂'},{name:'電競'},{name:'國際'},{name:'國家'}],doTab(index){this.tabIndex=index;this.scrollInto='tab'+index;}
  • 下面容器能做到切換與導航欄一樣,容器也能拉取

    <swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item v-for="(item,index) in tabBars" :key="index" ><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"><view v-for="i in 100">{{i}}</view></scroll-view></swiper-item></swiper>doTab(index){this.tabIndex=index;this.scrollInto='tab'+index;},onChange(e){this.doTab(e.detail.current);}onLoad() {const res = uni.getSystemInfoSync();this.scrollH=res.windowHeight-uni.upx2px(101);console.log(this.scrollH);},
  • 列表顯示

    <swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item v-for="(item,index) in newList" :key="index" ><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"><block v-for="(item2,index2) in item.list" :key="index"><commonList :item="item2" :index="index2" @follow="follow()" @doSupport="doSupport()"></commonList><divider></divider></block></scroll-view></swiper-item></swiper>getData(){let arr=[];for (var i = 0; i < this.tabBars.length; i++) {arr.push({list: [{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '/static/demo/datapic/45.jpg',support: {type: 'support',support_count: 1,unsupport_count: 2},comment_count: 1,share_num: 0},{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '',support: {type: 'unsupport',support_count: 2,unsupport_count: 2},comment_count: 1,share_num: 1},{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '',support: {type: '',support_count: 2,unsupport_count: 2},comment_count: 1,share_num: 1}]})};this.newList=arr;},

上拉加載組件開發(fā)

  • 靜態(tài)的開發(fā)

    <scroll-view scroll-y="true" :style="'height:'+scrollH+'px'" @scrolltolower="loadMore(index)"><block v-for="(item2,index2) in item.list" :key="index"><commonList :item="item2" :index="index2" @follow="follow()" @doSupport="doSupport()"></commonList><divider></divider></block><view class="py-2 flex justify-center align-center"><view class="text-light-muted">{{item.loading}}</view></view></scroll-view>
  • 觸底函數(shù)的開發(fā)

    loadMore(index){let item=this.newList[index];item.loading='加載中.';setTimeout(()=>{//復制文本item.list=[...item.list,...item.list];},2000)}

封裝上拉加載組件

  • 優(yōu)化加載判斷

    loadMore(index){let item=this.newList[index];if(!item==='上拉加載更多'){return;}item.loading='加載中...';setTimeout(()=>{item.list=[...item.list,...item.list];item.loading='上拉加載更多';},10000)}
  • 封裝load-more.vue 并引入

    <template><view class="py-2 flex justify-center align-center"><view class="text-light-muted">{{loading}}</view></view> </template><script>export default{props:{loading:String}} </script>import loadMore from '@/components/common/load-more';export default {components: {commonList,loadMore}, }

封裝無數(shù)據(jù)默認組件

  • 無數(shù)據(jù)環(huán)境測試

    const demo=[{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '/static/demo/datapic/45.jpg',support: {type: 'support',support_count: 1,unsupport_count: 2},comment_count: 1,share_num: 0},{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '/static/demo/datapic/45.jpg',support: {type: 'unsupport',support_count: 2,unsupport_count: 2},comment_count: 1,share_num: 1},{userPic: '/static/common//nothing.png',username: '',newstime: '',isFollow: false,title: '我是標題',titlePic: '',support: {type: '',support_count: 2,unsupport_count: 2},comment_count: 1,share_num: 1}]getData() {let arr = [];for (var i = 0; i < this.tabBars.length; i++) {let obj = {loading:'上拉加載更多',list: []}if(i<2){obj.list=demo;}arr.push(obj)};this.newList = arr;},
  • 封裝nothing.vue組件 全局引入

    <template v-if="item.list.length>0"><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'" @scrolltolower="loadMore(index)"><block v-for="(item2,index2) in item.list" :key="index"><commonList :item="item2" :index="index2" @follow="follow()" @doSupport="doSupport()"></commonList><divider></divider></block><loadMore :loading="item.loading"></loadMore></scroll-view></template><template v-else><no-thing></no-thing></template>import noThing from '@/components/common/no-thing.vue'; Vue.component('no-thing',noThing);

搜索頁開發(fā)

  • 創(chuàng)建頁面search,配置pages.json

    {"path": "pages/index/index","style": {"app-plus": {// 導航欄配置"titleNView":{// 搜索框配置"searchInput":{"align":"center","backgroundColor":"#F5F4F2","borderRadius":"4px","disabled":true,"placeholder":"搜索帖子","placeholderColor":"#6D6C67"},"buttons":[{"color":"#333333","colorPressed":"#FD597C","float":"right","fontSize":"20px","fontSrc":"/static/iconfont.ttf","text":"\ue668"}]}}}},{"path" : "pages/news/news","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}},{"path" : "pages/msg/msg","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}},{"path" : "pages/my/my","style" : {"navigationBarTitleText": "","enablePullDownRefresh": false}},{"path" : "pages/search/search","style": {"app-plus": {// 導航欄配置"titleNView":{// 搜索框配置"searchInput":{"align":"center","backgroundColor":"#F5F4F2","borderRadius":"4px","placeholder":"搜索帖子","placeholderColor":"#6D6C67"},"buttons":[{"color":"#333333","colorPressed":"#FD597C","float":"right","fontSize":"14px","text":"搜索"}]}}}}
  • 監(jiān)聽點擊導航欄搜索框事件, 實現(xiàn)跳轉,用官方api

    onNavigationBarSearchInputClicked() {uni.navigateTo({url: '../search/search'})},
  • 搜索歷史開發(fā)

    <view><view class="py-2 font-md px-2">搜索歷史</view><view class="flex flex-wrap"><view class="border rounded font mx-2 my-1 px-2 " v-for="(item,index) in list" :key="index"hover-class="bg-light">{{item}}</view></view></view>
  • 監(jiān)聽導航輸入

    onNavigationBarSearchInputChanged(e) {this.searchText=e.text;}
  • 監(jiān)聽導航搜索按鈕

    onNavigationBarButtonTap(e) {if(e.index===0){this.searchEvent();}},
  • 搜索事件, 收起鍵盤,處于loading狀態(tài), 展示搜索結果,隱藏loading提示框

    searchEvent(){uni.hideKeyboard();uni.showLoading({title:'加載中'})setTimeout(()=>{this.serachList=demo;uni.hideLoading();},3000)}
  • 搜索結果列表 引入commonlist,遍歷,優(yōu)化搜索歷史與列表存在問題

    <view><template v-if="this.serachList.length===0"><view class="py-2 font-md px-2">搜索歷史</view><view class="flex flex-wrap"><view class="border rounded font mx-2 my-1 px-2 " v-for="(item,index) in list" :key="index"hover-class="bg-light">{{item}}</view></view></template><template v-else><block v-for="(item,index) in serachList" :key="index" ><commonList :item="item" :index="index"></commonList></block></template></view>import commonList from '@/components/common/common-list.vue';export default {components:{commonList}, }
  • 點擊搜索歷史的事件

    <view class="flex flex-wrap"><view class="border rounded font mx-2 my-1 px-2 " v-for="(item,index) in list" :key="index"hover-class="bg-light" @click="historyEvent(item)">{{item}}</view></view>historyEvent(item){console.log(item);this.searchText=item;this.searchEvent();}

發(fā)布表單頁面開發(fā)

自定義導航欄開發(fā)

  • 新建發(fā)布頁面add-input,取消原生導航

    {"path" : "pages/add-input/add-input","style" : {"app-plus": {"titleNView": false}}}
  • 首頁導航按鈕跳轉頁面

    onNavigationBarButtonTap() {uni.navigateTo({url:'../add-input/add-input'})},
  • 自定義導航欄,添加uni-nav-bar依賴, 根據(jù)官方文檔調(diào)用

    <uni-nav-bar left-icon="back" statusBar><view class="flex justify-center align-center w-100">所有人可見<text class="iconfont icon-shezhi ml-1"></text></view></uni-nav-bar>

textarea組件使用

  • utextarea, 動態(tài)綁定

    <textarea v-model="content" placeholder="說一句話吧~" class="px-2 uni-textarea" />

底部操作條組件開發(fā)

<view style="height: 85rpx" class="fixed-bottom bg-white flex align-center"><view class="iconfont icon-caidan footer-btn"></view><view class="iconfont icon-huati footer-btn"></view><view class="iconfont icon-tupian footer-btn"></view><view class="bg-main text-white justify-center align-center ml-auto flex mr-2" style="width: 140rpx; height: 60rpx;">發(fā)送</view></view><style> .footer-btn{width: 86rpx;height: 86rpx;justify-content: center;display: flex;align-items: center;font-size: 50rpx; } </style>

上傳多圖功能開發(fā)

  • upload-image組件開發(fā), 引官方組件,對應引入也需要引入

  • 對官方組件的修改 添加mode壓縮,修改內(nèi)邊距, 修改圓角

    <view class="px-2"><view class="uni-uploader"><view class="uni-uploader-head"><view class="uni-uploader-title">點擊可預覽選好的圖片</view><view class="uni-uploader-info">{{imageList.length}}/9</view></view><view class="uni-uploader-body"><view class="uni-uploader__files"><block v-for="(image,index) in imageList" :key="index"><view class="uni-uploader__file"><image class="uni-uploader__img rounded" :src="image" :data-src="image"@tap="previewImage" mode="aspectFill"></image></view></block><view class="uni-uploader__input-box"><view class="uni-uploader__input rounded" @tap="chooseImage"></view></view></view></view></view></view>
  • 上傳圖片成功的內(nèi)容保存 上傳圖片的回調(diào)success方法中

    success: (res) => {this.imageList = this.imageList.concat(res.tempFilePaths);this.$emit('choose',this.imageList);},<uploadImage @choose="choose"></uploadImage>choose(e){console.log(e);this.imageList=e;}

刪除選中圖片功能實現(xiàn)

  • 靜態(tài)圖標的實現(xiàn)

    <block v-for="(image,index) in imageList" :key="index"><view class="uni-uploader__file position-relative"><image class="uni-uploader__img rounded" :src="image" :data-src="image"@tap="previewImage" mode="aspectFill"></image><view class="bg-dark position-absolute top-0 right-0 rounded"style="padding: 0 15rpx; background-color: rgba(0, 0, 0, 0.5);"><text class="iconfont icon-shanchu text-white"></text></view></view></block>
  • 添加刪除功能的函數(shù), 通知父組件, 優(yōu)化父組件方法, 給予交互反饋提示

    <text class="iconfont icon-shanchu text-white" @click="deleteImage(index)"></text>deleteImage(index){uni.showModal({title:'提示',content:'是否要刪除該圖片',confirmText:'刪除',cancelText:'不刪除',success: (res) => {if(res.confirm){this.imageList.splice(index,1);this.$emit('change',this.imageList);}}})},

保存草稿功能開發(fā)

  • 添加返回首頁方法

    <uni-nav-bar left-icon="back" statusBar @clickLeft="goBack"><view class="flex justify-center align-center w-100 font-weight-bold">所有人可見<text class="iconfont icon-shezhi ml-1"></text></view></uni-nav-bar>goBack(){uni.navigateBack({delta:1})},
  • 監(jiān)聽返回, 交互提示反饋 return true即能返回

    onBackPress() {if((this.content!==''||this.imageList.length>0)&&!this.showBack){uni.showModal({content: '是否保存為草稿',showCancel: true,cancelText: '不保存',confirmText: '保存',success: res => {if(res.confirm){console.log('保存');}//手動執(zhí)行返回// goBack(){// uni.navigateBack({// delta:1// })// },this.goBack();}});this.showBack=true;return true;}},
  • 保存的方法

    store(){let obj={content:this.content,imageList:this.imageList};uni.setStorage({key:'add-input',data:JSON.stringify(obj)})}
  • 取出的方法 用同步取出

    onLoad() {var res=uni.getStorageSync('add-input');if(res){var obj=JSON.parse(res);// console.log(result);this.content=obj.content;this.imageList=obj.imageList;}},
  • 優(yōu)化圖片的草稿功能, 上傳圖片的組件imageList要用props傳值

    <uploadImage :list="imageList" @change="change"></uploadImage>//組件里面props: {list: Array},created(){this.imageList=this.list;},
  • 不保存草稿功能的實現(xiàn), 清楚緩存

    onBackPress() {if((this.content!==''||this.imageList.length>0)&&!this.showBack){uni.showModal({content: '是否保存為草稿',showCancel: true,cancelText: '不保存',confirmText: '保存',success: res => {if(res.confirm){// console.log('保存');this.store();}else{uni.removeStorageSync('add-input');}//手動執(zhí)行返回this.goBack();}});this.showBack=true;return true;}},
  • 下面圖標插入圖片的方法(優(yōu)化不需要上傳圖片時隱藏上傳圖片組件)

    <view class="iconfont icon-tupian footer-btn" @click="iconClickEvent('uploadImage')"></view><uploadImage ref="uploadImage" :show="show" :list="imageList" @change="change"></uploadImage>iconClickEvent(e){switch (e){case 'uploadImage': this.$refs.uploadImage.chooseImage();break;}}computed:{show(){return this.imageList.length>0;}},在子組件中加入v-if=“show”

動態(tài)列表頁開發(fā)

導航欄tab導航開發(fā)

  • 自定義導航欄的靜態(tài)開發(fā)

    <uni-nav-bar statusBar="true" border="false" ><view class="flex align-center justify-center font-weight-bold w-100"><view class="font-lg text-main mx-1">關注</view><view class="font-md text-light-muted mx-1">話題</view></view><view slot="right" class="iconfont icon-fatie_icon"></view></uni-nav-bar>
  • 取消原生導航欄

    {"path": "pages/news/news","style": {"app-plus": {"titleNView": false}}},
  • 導航欄右邊圖標的單擊事件

    <uni-nav-bar statusBar="true" border="false" @clickRight="openAddInput"><view class="flex align-center justify-center font-weight-bold w-100"><view class="font-lg text-main mx-1">關注</view><view class="font-md text-light-muted mx-1">話題</view></view><view slot="right" class="iconfont icon-fatie_icon"></view></uni-nav-bar>openAddInput(){uni.navigateTo({url: '../add-input/add-input'})}
  • tabBar的動態(tài)循環(huán)渲染

    <uni-nav-bar statusBar="true" border="false" @clickRight="openAddInput"><view class="flex align-center justify-center font-weight-bold w-100 font-md text-light-muted"><view v-for="(item,index) in tabBars" :key="index":class="tabIndex===index? 'text-main font-lg':''"@click="changeTab(index)" class="mx-1">{{item.name}}</view></view><view slot="right" class="iconfont icon-fatie_icon"></view></uni-nav-bar>data() {return {tabIndex:0,tabBars:[{name:'關注'},{name:'話題'}]}},changeTab(index){this.tabIndex=index;}

關注列表頁開發(fā)

滑動滾動區(qū)域計算

  • 引入首頁的swipper和scrollview組件, 對應修改即可

    <swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"></scroll-view></swiper-item></swiper>
  • 計算區(qū)域高度

    onLoad() {const res = uni.getSystemInfoSync();this.scrollH=res.screenHeight-res.statusBarHeight-44;console.log(this.scrollH);},

導航列表聯(lián)動實現(xiàn)

  • 有兩個swipperitem 表示關注和話題

    <swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"><view v-for=" (item,index) in 100" :key="index">{{item}}</view></scroll-view></swiper-item><swiper-item><view>話題</view></swiper-item></swiper>
  • 引入common-list組件

  • 分割線的使用

    <swiper-item><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"><block v-for="(item,index) in list" :key="index" ><commonList :item="item" :index="index"></commonList><divider></divider></block></scroll-view></swiper-item><swiper-item><view>話題</view></swiper-item>
  • 導航與列表的聯(lián)動實現(xiàn)

    <swiper duration=150 @change="onChangeTab" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'"><block v-for="(item,index) in list" :key="index" ><commonList :item="item" :index="index"></commonList><divider></divider></block></scroll-view></swiper-item><swiper-item><view>話題</view></swiper-item></swiper>onChangeTab(e){// console.log(e.detail);this.tabIndex=e.detail.current;}

頂踩操作和下拉加載功能 copy首頁即可

  • 移植頂踩操作
  • 下拉加載的開發(fā)

關注列表頁開發(fā)

熱門分類組件開發(fā)

  • 靜態(tài)頁面開發(fā)

    <swiper-item><view class="flex justify-between align-center px-2"><text class="font-md">熱門分類</text><view class="flex align-center font text-secondary">更多<text class="iconfont icon-jinru"></text></view></view><view class="flex align-center border-bottom px-2 py-3"><view class="rounded border bg-light mx-1 px-2">關注</view><view class="rounded border bg-light mx-1 px-2">關注</view><view class="rounded border bg-light mx-1 px-2">關注</view><view class="rounded border bg-light mx-1 px-2">關注</view></view></swiper-item>
  • 添加點擊動畫效果

    <view class="rounded border bg-light mx-1 px-2 animated" hover-class="jello">關注</view>

封裝熱門分類組件

  • 熱門分類對象數(shù)組構建

    hotCate:[{name:'關注'},{name:'推薦'},{name:'體育'},{name:'軍事'}]
  • 封裝組件, 導入組件,遍歷輸出, 父子傳值

  • 留兩個接口

    <hotCate :hotCate="hotCate"></hotCate><template><view><view class="flex justify-between align-center px-2"><text class="font-md">熱門分類</text><view class="flex align-center font text-secondary animated" hover-class="jello" @click="openMore">更多<text class="iconfont icon-jinru"></text></view></view><view class="flex align-center border-bottom px-2 py-3"><view class="rounded border bg-light mx-1 px-2 animated" hover-class="jello"v-for="(item,index) in hotCate" :key="index" @click="openDetail">{{item.name}}</view></view></view> </template><script>export default{props:['hotCate'],methods:{openMore(){console.log("點擊更多");},openDetail(){console.log("點擊進入詳情頁");}}} </script><style> </style>

輪播圖和搜索框的開發(fā)

  • 靜態(tài)頁面開發(fā)

    <view class="p-2"><view class="flex align-center justify-center py-2 rounded bg-light text-secondary"><text class="iconfont icon-sousuo mr-2"></text>搜索話題</view></view><swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" class="px-2 pb-2"><swiper-item><image src="/static/demo/banner3.jpg" class="w-100 rounded" style="height: 300rpx;"></image></swiper-item></swiper><divider></divider>

話題列表組件開發(fā)

  • 靜態(tài)頁面開發(fā)

    <view class="p-2 font-md"> 最近更新</view><view class="flex align-center p-2"><image src="../../static/demo/topicpic/1.jpeg" style="width: 150rpx; height: 150rpx;"class="rounded mr-2"></image><view class="flex flex-column "><text class="font-md text-dark">話題哈哈哈</text><text class="font text-secondary">話題描述</text><view class="flex align-center font text-secondary"><text class="mr-2">今日:0</text><text>關注:0</text></view></view></view>

封裝話題列表組件

  • 聲明topicList

    topicList: [{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'}]
  • 封裝組件,引入組件

    <block v-for="(item,index) in topicList" :key="index"><topicList :item="item" :index="index"></topicList></block><view class="flex align-center p-2"><image :src="item.cover" style="width: 150rpx; height: 150rpx;"class="rounded mr-2"></image><view class="flex flex-column "><text class="font-md text-dark">{{item.title}}</text><text class="font text-secondary">{{item.desc}}</text><view class="flex align-center font text-secondary"><text class="mr-2">動態(tài):{{item.news_count}}</text><text>今日:{{item.today_count}}</text></view></view></view>

話題分類頁開發(fā)

  • 新建頁面

    {"path" : "pages/topic-nav/topic-nav","style" : {"navigationBarTitleText": "話題分類"}}
  • 導航進入

    openMore(){uni.navigateTo({url:'../topic-nav/topic-nav'})},
  • 引入首頁,修改topic—nav頁面,修改common-list組件, 修改數(shù)據(jù)

    <template><view><scroll-view class="scroll-row border-bottom border-light-secondary" scroll-x="true":scroll-into-view="scrollInto" scroll-with-animation="true" style="height: 100rpx;"><view v-for="(item,index) in tabBars" :key="index" class="scroll-row-item px-3 py-2 font-md ":id="'tab'+index" :class="tabIndex===index?'text-main font-lg font-weight-bold':''"@click="doTab(index)">{{item.name}}</view></scroll-view><swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item v-for="(item,index) in newList" :key="index"><template v-if="item.list.length>0"><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'" @scrolltolower="loadMore(index)"><block v-for="(item2,index2) in item.list" :key="index"><!-- <commonList :item="item2" :index="index2" @follow="follow()" @doSupport="doSupport()"></commonList> --><topicList :item="item2" :index="index2"></topicList></block><loadMore :loading="item.loading"></loadMore></scroll-view></template><template v-else><no-thing></no-thing></template></swiper-item></swiper></view> </template><script>import topicList from '@/components/news/topic-list';import loadMore from '@/components/common/load-more';const demo = [{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'},{cover: '/static/demo/topicpic/1.jpeg',title: '話題標題',desc: '話題描述',news_count: '10',today_count: '10'}];export default {components: {topicList,loadMore},data() {return {scrollH: 200,tabIndex: 0,scrollInto: '',newList: [],tabBars: [{name: '首頁'},{name: '體育'},{name: '軍事'},{name: '熱點'},{name: '新聞'},{name: '娛樂'},{name: '電競'},{name: '國際'},{name: '國家'}]}},onNavigationBarSearchInputClicked() {uni.navigateTo({url: '../search/search'})},onLoad() {const res = uni.getSystemInfoSync();this.scrollH = res.windowHeight - uni.upx2px(101);this.getData();},onNavigationBarButtonTap() {uni.navigateTo({url:'../add-input/add-input'})},methods: {getData() {let arr = [];for (var i = 0; i < this.tabBars.length; i++) {let obj = {loading: '上拉加載更多',list: []}if (i < 2) {obj.list = demo;}arr.push(obj)};this.newList = arr;},follow(index) {this.list[index].isFollow = true;uni.showToast({title: '關注成功'})},doSupport(e) {let obj = this.list[e.index];if (obj.support.type === '') {//無操作obj.support[e.type + '_count']++;} else if (obj.support.type === 'support' && e.type === 'unsupport') {//之前是頂,頂減一,踩加一obj.support.support_count--;obj.support.unsupport_count++;} else if (obj.support.type === 'unsupport' && e.type === 'support') {//之前是踩,頂加一,踩減一obj.support.support_count++;obj.support.unsupport_count--;}obj.support.type = e.type;let msg = e.type === 'support' ? '頂' : '踩';uni.showToast({title: msg + '成功'})},doTab(index) {this.tabIndex = index;this.scrollInto = 'tab' + index;},onChange(e) {this.doTab(e.detail.current);},loadMore(index) {let item = this.newList[index];if ((item.loading) !== '上拉加載更多') {return;}item.loading = '加載中...';setTimeout(() => {item.list = [...item.list, ...item.list];item.loading = '上拉加載更多';}, 2000)}}} </script><style></style>

話題詳情頁開發(fā)

page.json配置

  • 新建topic-detail頁面

  • 配置導航欄, 漸變式透明, 圖標

    {"path" : "pages/topic-detail/topic-detail","style" : {"navigationBarTitleText": "","app-plus": {"titleNView": {"type": "transparent","buttons": [{"type": "menu"}]}}} }
  • 導航到話題詳情頁, 傳遞json字符串對象, 接受數(shù)據(jù)轉換object

    <view class="flex align-center p-2" @click="openDetail(item)">openDetail(item){uni.navigateTo({url:'../topic-detail/topic-detail?detail='+JSON.stringify(item)})}onLoad(e){if(e.detail){var obj=JSON.parse(e.detail);// console.log(obj);}},

話題介紹組件開發(fā)

  • 圖片模糊狀態(tài)

  • 靜態(tài)開發(fā)

    <view><view class="position-relative"><image src="/static/demo/topicpic/1.jpeg" mode="aspectFill"style="height: 300rpx;" class="w-100 filter"></image></view><view class=" px-2 bg-white position-relative" style="z-index: 10;"><view class="flex align-center"><image src="/static/demo/topicpic/1.jpeg" class="w-100" style="height: 150rpx; width: 150rpx;margin-top: -75rpx;"></image><text class="font-md">#話題標題#</text></view><view class="flex align-center font text-secondary mt-2"><text class="mr-1">動態(tài):0</text><text>今日:0</text></view><view class="font text-secondary">話題描述</view></view></view><style> .filter{filter: blur(10px); } </style>

封裝話題介紹組件

  • 新建topic-info組件

  • 動態(tài)替換, 數(shù)據(jù)渲染

    <template><view><view class="position-relative"><image :src="info.cover" mode="aspectFill" style="height: 300rpx;" class="w-100 filter"></image></view><view class=" px-2 bg-white position-relative pb-1" style="z-index: 10;"><view class="flex align-center"><image :src="info.cover" class="w-100" style="height: 150rpx; width: 150rpx;margin-top: -75rpx;"></image><text class="font-md">{{info.title}}</text></view><view class="flex align-center font text-secondary mt-2"><text class="mr-1">動態(tài):{{info.news_count}}</text><text>今日:{{info.today_count}}</text></view><view class="font text-secondary">{{info.desc}}</view></view></view> </template><script>export default {props:['info']} </script><style> </style><topicInfo :info="info"></topicInfo><divider></divider>

精華帖子列表組件開發(fā)

<view class="flex p-2 border-bottom"><text class="iconfont icon-xihuan text-main"></text><text class="font text-darker text-ellipsis"> 【新人必讀】uni-app實戰(zhàn)項目第四季社區(qū)交友開發(fā)</text></view><view class="flex p-2 border-bottom"><text class="iconfont icon-xihuan text-main"></text><text class="font text-darker text-ellipsis"> 【新人必讀】uni-app實戰(zhàn)項目第四季社區(qū)交友開發(fā)</text></view>

tab選項卡組件開發(fā)

  • 優(yōu)化精華帖子列表開發(fā), 用循環(huán)

    <block v-for="(item,index) in hotList" :key="index"><view class="flex p-2 border-bottom"><text class="iconfont icon-xihuan text-main"></text><text class="font text-darker text-ellipsis">{{item.title}}</text></view></block>hotList: [{title: '【新人必讀】uni-app實戰(zhàn)項目第四季社區(qū)交友開發(fā)'},{title: '【新人必讀】Hillky社區(qū)規(guī)范'}]
  • tab選項開發(fā)

    <view class="flex align-center py-2"><text class="flex-1 flex align-center justify-center font-weight-bold font-lg text-main">默認</text><text class="flex-1 flex align-center justify-center font-weight-bold font-md text-dark">最新</text></view>
  • 列表開發(fā), 引入公共列表, 聲明兩個數(shù)組list1,2

    <block v-for="(item,index) in list1" :key="index"><commonList :item="item" :index="index"></commonList></block>
  • tab切換實現(xiàn)

    <view class="flex align-center py-2" ><text class="flex-1 flex align-center justify-center"v-for="(item,index) in tabBar" :key="index":class="tabIndex===index?'font-lg text-main font-weight-bold':'font-md text-dark'"@click="changeTab(index)">{{item.name}}</text></view>tabIndex: 0,tabBar:[{name:'默認'},{name:'最新'}]

利用計算屬性實現(xiàn)列表切換

  • 用計算屬性切換數(shù)組

    computed: {listData() {if (this.tabIndex === 0) {return this.list1;}if (this.tabIndex === 1) {return this.list2;}}},
  • 遍歷列表要分割線

  • 判斷數(shù)組長度, 用nothing組件

    <template v-if="listData.length>0"><block v-for="(item,index) in listData" :key="index"><commonList :item="item" :index="index"></commonList><divider></divider></block></template><template v-else><no-thing></no-thing></template>

話題詳情上拉加載實現(xiàn)

  • 觸底事件

    onReachBottom() {this.loadMore();},
  • 引入上拉加載組件

    import loadMore from '@/components/common/load-more';<loadMore :loading="loadText"></loadMore>
  • loadText計算屬性區(qū)分是哪個列表的上拉加載

    loadText1:'上拉加載更多', loadText2:'上拉加載更多'loadText(){if(this.tabIndex===0){return this.loadText1}else{return this.loadText2}}
  • 上拉加載更多事件

    loadMore(){let index =this.tabIndexif(this['loadText'+(index+1)]!=='上拉加載更多'){return;}this['loadText'+(index+1)]='加載中...'setTimeout(()=>{this['loadText'+(index+1)]='上拉加載更多';this['list'+(index+1)]=[...this['list'+(index+1)],...this['list'+(index+1)]];},2000)}

消息列表頁面開發(fā)

page.json配置

  • 配置頂部導航欄, 配置左右圖標

    {"path": "pages/msg/msg","style": {"navigationBarTitleText": "消息列表","app-plus": {"titleNView": {"buttons": [{"color": "#333333","colorPressed": "#FD597C","float": "left","fontSize": "20px","fontSrc": "/static/iconfont.ttf","text": "\ue611"},{"color": "#333333","colorPressed": "#FD597C","float": "right","fontSize": "20px","fontSrc": "/static/iconfont.ttf","text": "\ue649"}]}}}

消息列表組件開發(fā)

  • 靜態(tài)開發(fā)

  • 引入數(shù)字腳標組件

    <view><view class="flex align-center justify-center p-2 border-bottom border-light-secondary"><image src="../../static/default.jpg" style="height: 80rpx; width: 80rpx;" class="rounded-circle mr-2"></image><view class="flex-column flex flex-1"><view class="flex align-center justify-between"><text class="font-md text-dark">昵稱</text><text class="font-sm text-secondary">17:00</text></view><view class="py-1 flex align-center justify-between"><view class=" font-sm text-secondary">內(nèi)容</view><uni-badge text="1" type="error"></uni-badge></view></view></view></view>

封裝消息列表組件

  • 優(yōu)化內(nèi)容, 添加對應css和最大寬度

    <view class="pt-1 flex align-center justify-between"><view class=" font-sm text-secondary text-ellipsis" style="max-width: 500rpx;">內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容</view><uni-badge text="1" type="error"></uni-badge></view>
  • 封裝數(shù)據(jù),封裝組件, 時間使用在線時間戳

  • 引入time.js, 使用對應庫,使用過濾器

    import $T from '@/common/time.js'filters:{formatTime(value){return $T.gettime(value);}},
  • 組件分離

    <block v-for="(item,index) in list" :key="index"><msgList :item="item" :index="index"></msgList></block><template><view class="flex align-center justify-center p-2 border-bottom border-light-secondary"><image :src="item.avatar" style="height: 80rpx; width: 80rpx;" class="rounded-circle mr-2"></image><view class="flex-column flex flex-1"><view class="flex align-center justify-between"><text class="font-md text-dark">{{item.username}}</text><text class="font-sm text-secondary">{{item.update_time | formatTime}}</text></view><view class="pt-1 flex align-center justify-between"><view class=" font-sm text-secondary text-ellipsis" style="max-width: 500rpx;">{{item.data}}</view><uni-badge :text="item.noread" type="error"></uni-badge></view></view></view> </template><script>import $T from '@/common/time.js'export default {props:{item:Object,index:Number},filters: {formatTime(value){// console.log(value);return $T.gettime(value);}}} </script><style> </style>

下拉刷新功能實現(xiàn)

  • page.json配置

    "enablePullDownRefresh": true,
  • 監(jiān)聽下拉刷新, 寫入方法

    onPullDownRefresh() {this.refresh();},refresh(){setTimeout(()=>{this.list=demo;uni.stopPullDownRefresh();},2000);}
  • 引入nothing組件, v-if判斷

    <template><view><template v-if="this.list.length>0"><block v-for="(item,index) in list" :key="index"><msgList :item="item" :index="index"></msgList></block></template><template v-else><no-thing></no-thing></template></view> </template><script>const demo=[{avatar:'../../static/default.jpg',username:'昵稱',update_time:1648458088,data:'內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容',noread:20},{avatar:'../../static/default.jpg',username:'昵稱',update_time:1648458088,data:'內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容',noread:20},{avatar:'../../static/default.jpg',username:'昵稱',update_time:1648458088,data:'內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容',noread:20},{avatar:'../../static/default.jpg',username:'昵稱',update_time:1648458088,data:'內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容內(nèi)容',noread:20}];import msgList from '@/components/msg/msg-list';export default {components:{msgList},data() {return {list:[]}},onLoad() {this.list=demo;console.log(this.list);},onPullDownRefresh() {this.refresh();},methods: {refresh(){setTimeout(()=>{this.list=[...this.list,...this.list];uni.stopPullDownRefresh();},2000);}}} </script><style></style>

下拉彈出層組件使用

  • 使用uni-poup組件,

  • 監(jiān)聽原生導航欄按鈕事件,彈出彈出層

    <uni-popup ref="popup" type="top" background-color="#fff">123</uni-popup>onNavigationBarButtonTap(e) {switch (e.index){case 0:break;case 1:this.$refs.popup.open();break;}},

下拉彈出選項完善

  • 靜態(tài)開發(fā)

  • 添加點擊事件

    <uni-popup ref="popup" type="top" background-color="#fff"><view class="flex justify-center align-center font-md border-bottom py-2" hover-class="bg-light"@click="popupEvent('findFriend')"><text class="iconfont icon-sousuo mr-2" ></text>搜索好友</view><view class="flex justify-center align-center font-md py-2" hover-class="bg-light"@click="popupEvent('deleteList')"><text class="iconfont icon-shanchu mr-2"></text>刪除列表</view></uni-popup>popupEvent(event){switch (event){case 'findFriend':{console.log('findFriend');this.$refs.popup.close();break;}case 'deleteList':{console.log('deleteList');this.$refs.popup.close();break;}}}

我的好友列表頁開發(fā)

page.json配置

  • 新建user-list, 導航進入該頁面

    onNavigationBarButtonTap(e) {switch (e.index){case 0:uni.navigateTo({url:'../user-list/user-list'})break;case 1:this.$refs.popup.open();break;}},
  • 配置page.json

    {"path": "pages/user-list/user-list","style": {"navigationBarTitleText": "","app-plus": {"animationType": "slide-in-left","titleNView": {"autoBackButton": true,"searchInput": {"align": "center","backgroundColor": "#F5F4F2","borderRadius": "4px","disabled": true,"placeholder": "搜索用戶","placeholderColor": "#6D6C67"},"buttons": [{"color": "#333333","colorPressed": "#FD597C","float": "right","fontSize": "14px","text": "取消"}]}}}
  • 監(jiān)聽點擊輸入框事件, 監(jiān)聽取消按鈕事件

    onNavigationBarSearchInputClicked() {// console.log('跳轉');uni.navigateTo({url:'../search/search'})},onNavigationBarButtonTap() {uni.navigateBack({delta: 1})},

tab導航組件再次優(yōu)化

  • 引入tabBar導航

  • 條件渲染數(shù)字

    <view class="flex align-center py-2"><text class="flex-1 flex align-center justify-center" v-for="(item,index) in tabBar" :key="index":class="tabIndex===index?'font-lg text-main font-weight-bold':'font-md text-dark'"@click="changeTab(index)">{{item.name}} <text v-if="item.num>0" class="ml-1">{{item.num}}</text> </text></view>

好友列表組件開發(fā)

  • 引入首頁的scrollview, 下拉, 對應修改和引入

  • 列表樣式靜態(tài)開發(fā)

    <swiper duration=150 @change="onChange" :current="tabIndex" :style="'height:'+scrollH+'px'"><swiper-item v-for="(item,index) in newList" :key="index"><template v-if="item.list.length>0"><scroll-view scroll-y="true" :style="'height:'+scrollH+'px'" @scrolltolower="loadMore(index)"><block v-for="(item2,index2) in item.list" :key="index2"><view class="flex align-center p-2 border-bottom border-light-secondary"><image src="../../static/default.jpg" class="rounded-circle mr-2" style="width: 100rpx; height: 100rpx;"></image><view class="flex flex-column flex-1"><text class="font-md text-dark">昵稱</text><text class="font-sm mt-1">性別</text></view><view class="uni-icon uni-icon-checkbox-filled text-light-muted "></view></view></block><loadMore :loading="item.loading"></loadMore></scroll-view></template><template v-else><no-thing></no-thing></template></swiper-item></swiper>getData() {let arr = [];for (var i = 0; i < this.tabBars.length; i++) {let obj = {loading: '上拉加載更多',list: []}if (i < 2) {obj.list = [1,2,3,4];}arr.push(obj)};this.newList = arr;},changeTab(index){this.tabIndex=index;},onChange(e){this.changeTab(e.detail.current);},loadMore(index) {let item = this.newList[index];if ((item.loading) !== '上拉加載更多') {return;}item.loading = '加載中...';setTimeout(() => {item.list = [...item.list, ...item.list];item.loading = '上拉加載更多';}, 2000)}

強化badge組件開發(fā)

  • 使用uni-badge, 插入圖標, 優(yōu)化性別顯示

    <view><text class="iconfont icon-nv text-secondary"style="font-size: 18rpx;"></text><uni-badge type="error" text="24"></uni-badge></view>

封裝好友列表組件

  • 測試demo數(shù)據(jù)

    const demo=[{avatar:'../../static/default.jpg',username:'昵稱',sex:1,age:24,isFollow:false},{avatar:'../../static/default.jpg',username:'昵稱',sex:2,age:24,isFollow:true}];
  • 數(shù)據(jù)渲染,動態(tài)綁定性別class, 點擊灰色

  • 封裝組件, 引入組件

    <template><view><view class="flex align-center p-2 border-bottom border-light-secondary " hover-class="bg-light"><image :src="item.avatar" class="rounded-circle mr-2" style="width: 100rpx; height: 100rpx;"></image><view class="flex flex-column flex-1"><text class="font-md text-dark">{{item.username}}</text><view v-if="item.sex>0"><text class="iconfont text-secondary" :class="item.sex===1?'icon-nv':'icon-nan'" style="font-size: 18rpx;"></text><uni-badge :type="item.sex===1?'error':'primary'" :text="item.age"></uni-badge></view></view><view class="uni-icon uni-icon-checkbox-filled " :class="item.isFollow?'text-light-muted':'text-main'"></view></view></view> </template><script>export default {name:"user-list",props:{item:Object,index:Number},data() {return {};}} </script><style></style>import userList from '@/components/user-list/user-list.vue';<userList :item="item2" :index="index2"></userList>

優(yōu)化我的好友列表頁面

  • 優(yōu)化scrollH問題,引入首頁方法

    onLoad() {this.getData();const res = uni.getSystemInfoSync();this.scrollH = res.windowHeight - uni.upx2px(101);// console.log(this.scrollH);},
  • 隱藏上拉加載組件

    <loadMore :loading="item.loading" v-if="item.list.length>10"></loadMore>

聊天界面開發(fā)

page.json配置

  • 新建頁面user-chat, 導航進入

  • 配置導航欄

    {"path" : "pages/user-chat/user-chat","style" :{"app-plus": {"titleNView": {"buttons": [{"color": "#333333","colorPressed": "#FD597C","float": "right","fontSize": "20px","fontSrc": "/static/iconfont.ttf","text": "\ue628"}]}}}

聊天輸入框組件開發(fā)

  • 底部操作條開發(fā)

    <view class="flex fixed-bottom align-center bg-white border-top" style="height: 100rpx;"><view class="flex-1"><input type="text" placeholder="請文明發(fā)言" class="rounded ml-2 bg-light p-1" /></view><view class="iconfont icon-fabu flex align-center justify-center font-lg animated" style="width: 100rpx;"hover-class="jello text-main"></view></view>

聊天列表組件開發(fā)

  • scrollH獲取

    <scroll-view :style="'height: '+this.scrollH+'px;'" scroll-y="true"><view v-for="i in 100" :key="i">{{i}}</view></scroll-view>onLoad() {const res = uni.getSystemInfoSync();this.scrollH = res.windowHeight - uni.upx2px(101);},
  • 聊天列表組件開發(fā)

  • 右邊氣泡的開發(fā)

    <scroll-view :style="'height: '+this.scrollH+'px;'" scroll-y="true"><view class="flex align-start px-2 my-2"><image src="../../static/default.jpg" class="rounded-circle"style="height: 100rpx; width: 100rpx;"></image><view class="bg-light mx-2 p-2 rounded mt-1" style="max-width: 400rpx; min-width: 100rpx;">你好啊</view></view><view class="flex align-start px-2 my-2" style="flex-direction: row-reverse;"><image src="../../static/default.jpg" class="rounded-circle"style="height: 100rpx; width: 100rpx;"></image><view class="bg-light mx-2 p-2 rounded mt-1" style="max-width: 400rpx; min-width: 100rpx;">你好啊</view></view></scroll-view>

封裝聊天列表組件完善時間顯示

  • 新建user-chat-list, 封裝數(shù)據(jù)

  • 計算屬性, 是否本人

    isShelf(){return this.item.userId===1},
  • 時間顯示開發(fā)

    <view class="my-2 flex align-center justify-center text-secondary font-sm">{{shortTime}}</view>
  • 引入time.js, 優(yōu)化時間顯示, 用計算屬性

    shortTime(){return $T.getChatTime(this.item.create_time,this.preTime);}<userChatList :item="item" :index="index" :preTime=" index>0 ? list[index-1].create_time : 0"></userChatList>

完善聊天頁功能

  • 輸入框綁定內(nèi)容, 綁定發(fā)送事件, 發(fā)送功能實現(xiàn)

    sendMessage(){let obj={userId:1,avatar: '../../static/default.jpg',data: this.content,type: 'text',create_time: (new Date()).getTime()};if(obj.data===''){uni.showToast({title:"請輸入內(nèi)容"});return;}this.list.push(obj);this.content=''}
  • 優(yōu)化功能, 最小寬度去掉, 鍵盤推頁面false, 清空輸入框, 丟棄scrollH

    <input type="text" placeholder="請文明發(fā)言" class="rounded ml-2 bg-light p-1" v-model="content" adjust-position="false" /><scroll-view style="position: absolute; left: 0 ; top: 0; right: 0; bottom: 100rpx;" scroll-y="true">
  • 滾動到底部實現(xiàn)

    <scroll-view style="position: absolute; left: 0 ; top: 0; right: 0; bottom: 100rpx;" scroll-y="true":scroll-into-view="scrollInto" scroll-with-animation><block v-for="(item,index) in list" :key="index"><userChatList :id="'chat'+index" :item="item" :index="index" :preTime=" index>0 ? list[index-1].create_time : 0"></userChatList></block></scroll-view>pageToBottom(){let lastIndex=this.list.length-1;if(lastIndex < 0){return}this.scrollInto='chat'+lastIndex;console.log(this.scrollInto);}onReady() {this.pageToBottom();},

搜索列表頁開發(fā)

搜索列表功能完善

  • 添加搜索標識

    onNavigationBarSearchInputClicked() {uni.navigateTo({url: '../search/search?type=post'})},
  • 獲取類型, 修改搜索占位, 添加如果說是app端

    if (e.type) {this.type = e.type;}let pageTitle='';switch (this.type) {case 'post':pageTitle='搜索帖子'break;case 'topic':pageTitle='搜索話題'break;case 'friend':pageTitle='搜索好友'break;}console.log(this.type);// #ifdef APP-PLUSlet currentWebview=this.$scope.$getAppWebview();let tn=currentWebview.getStyle().titleNView;tn.searchInput.placeholder=pageTitle;console.log(tn);currentWebview.setStyle({titleNView:tn})// #e
  • 搜索結果完善優(yōu)化, 根據(jù)不同搜索,組件,數(shù)據(jù)都要不同

    searchEvent() {uni.hideKeyboard();uni.showLoading({title: '加載中'})setTimeout(() => {switch (this.type) {case 'post':this.serachList = demo1;break;case 'topic':this.serachList = demo2;break;case 'friend':this.serachList = demo3;break;}uni.hideLoading();}, 3000)},<block v-for="(item,index) in serachList" :key="index"><template v-if="type==='post'"><commonList :item="item" :index="index"></commonList></template><template v-if="type==='topic'"><topicList :item="item" :index="index"></topicList></template><template v-if="type==='friend'"><userList :item="item" :index="index"></userList></template></block>

文章詳情頁開發(fā)

page.json配置

  • 新建頁面,detail, 導航入口

    ,{"path" : "pages/detail/detail","style" : {"app-plus": {"titleNView": {"buttons": [{"float": "right","type": "menu"}]}}}}
  • 把對象作為參數(shù)傳過去,初始化

    openDetail(){console.log("打開詳情頁");uni.navigateTo({url:'../../pages/detail/detail?detail='+JSON.stringify(this.item)})},onLoad(e){if(e.detail){this.__init(JSON.parse(e.detail));}},methods: {__init(data){uni.setNavigationBarTitle({title:data.title})}}

強化公共列表組件功能

  • 修改公共列表組件, 添加isDetail, prop, 評論和分享功能

    props: {item: Object,index: {type: Number,default: -1},isDetail: {type: Boolean,default: false}},doComment(){if(!this.isDetail){return this.openDetail();}this.$emit('doComment');},doShare(){if(!this.isDetail){return this.openDetail();}this.$emit('doShare');} <commonList :item="this.item" :isDetail="true" @doComment="doComment" @doShare="doShare">帖子詳請</commonList>

完善詳情頁關注頂踩功能

  • 關注事件, 修改index默認值

    follow() {this.info.isFollow = true;}index: {type: Number,default: -1}
  • 頂踩方法改寫

    doSupport(e) {let obj = this.infoif (obj.support.type === e.type) {uni.showToast({title: '你已經(jīng)操作過了'})return;}if (obj.support.type === '') {//無操作obj.support[e.type + '_count']++;} else if (obj.support.type === 'support' && e.type === 'unsupport') {//之前是頂,頂減一,踩加一obj.support.support_count--;obj.support.unsupport_count++;} else if (obj.support.type === 'unsupport' && e.type === 'support') {//之前是踩,頂加一,踩減一obj.support.support_count++;obj.support.unsupport_count--;}obj.support.type = e.type;let msg = e.type === 'support' ? '頂' : '踩';uni.showToast({title: msg + '成功'})}
  • 增加content,image

    content:"Hillky正在開發(fā)ing.....",images:[{url:"https://tupian.qqw21.com/article/UploadPic/2020-5/20205622141239876.jpg"},{url:"https://tse1-mm.cn.bing.net/th/id/R-C.df1d553893d9b7888c725b8dbcbcf439?rik=hpbIzO6xZ3Qchw&riu=http%3a%2f%2fwww.chabeichong.com%2fimages%2f2016%2f11%2f12-04122113.jpg&ehk=%2fe971CgX%2bMeAgZuGCVac3td74wDOd1%2bWzz0q4IsP1Lc%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1"}]
  • 增加圖片預覽功能

    <image v-for="(item,index) in info.images" :src="item.url" class="w-100" mode="widthFix" @click="preview(index)"></image>preview(index){// console.log(this.imageList);uni.previewImage({urls:this.imageList,current:index})}computed:{imageList(){return this.info.images.map(item=>item.url);}},

評論輸入框組件封裝

  • 先對聊天室底部操作條的封裝,測試是否成功

    <template><view class="flex fixed-bottom align-center bg-white border-top" style="height: 100rpx;"><view class="flex-1"><input type="text" placeholder="請文明發(fā)言" class="rounded ml-2 bg-light p-1" v-model="content"adjust-position="false" /></view><view class="iconfont icon-fabu flex align-center justify-center font-lg animated" style="width: 100rpx;"hover-class="jello text-main" @click="sendMessage"></view></view> </template><script>export default {data(){return{content:''}},methods:{sendMessage(){if (this.content === '') {uni.showToast({title: "請輸入內(nèi)容",icon:"none"});return;}this.$emit('submit',this.content);this.content = '';}}} </script><style> </style><bottomBtn @submit="submit"></bottomBtn>submit(content) {let obj = {userId: 1,avatar: '../../static/default.jpg',data: content,type: 'text',create_time: (new Date()).getTime()};this.list.push(obj);this.pageToBottom();},
  • 再到detail頁面使用該組件,需要占位

列表評論組件開發(fā)

  • 使用官方評論界面,進行靜態(tài)開發(fā)

    <view class="px-2"><!-- 評論區(qū) start --><view class="uni-comment"><view class="uni-comment-list"><view class="uni-comment-face" style="margin-top: 15rpx;"><image src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/uni@2x.png" mode="widthFix"></image></view><view class="uni-comment-body"><view class="uni-comment-top"><text>網(wǎng)友</text></view><view class="uni-comment-date"><text>08/10 08:12</text></view><view class="uni-comment-content">很酷的HBuilderX和uni-app,開發(fā)一次既能生成小程序,又能生成App</view></view></view></view></view>

分享功能組件開發(fā)

  • 彈出層,底部彈出, 監(jiān)聽導航欄按鈕觸發(fā), 層級關系的修改-z-index

    <uni-popup ref="popup" type="bottom" background-color="#fff"><view style="height: 300rpx;">123</view></uni-popup>onNavigationBarButtonTap() {this.$refs.popup.open();},uni-popup {position: fixed;/* #ifndef APP-NVUE */z-index: 9999;
  • 監(jiān)聽返回事件,隱藏彈出層

    onBackPress() {this.$refs.popup.close();},
  • 靜態(tài)開發(fā)

    <view class="font-md border-bottom border-light-secondary text-center py-2">分享到</view><view class="flex align-center "><view class="flex flex-1 flex-column justify-center align-center py-2"><view class="iconfont icon-QQ rounded-circle bg-primary text-white flex align-center justify-center font-lg" style="width: 100rpx; height: 100rpx;"></view><view class="font mt-1 text-light-muted">QQ好友</view></view>...</view><view class="font-md border-top border-light-secondary text-center py-2">取消</view>
  • 遍歷圖標

    <block v-for="(item,index) in btnList" :key="index"><view class="flex flex-1 flex-column justify-center align-center py-2"><viewclass="iconfont rounded-circle bg-primary text-white flex align-center justify-center font-lg":class="item.icon+' '+item.color "style="width: 100rpx; height: 100rpx;"></view><view class="font mt-1 text-light-muted">{{item.name}}</view></view></block>
  • 封裝組件 more-share.vue

    <template><view><uni-popup ref="popup" type="bottom" background-color="#fff"><view class="font-md border-bottom border-light-secondary text-center py-2">分享到</view><view class="flex align-center "><block v-for="(item,index) in btnList" :key="index"><view class="flex flex-1 flex-column justify-center align-center py-2"><viewclass="iconfont rounded-circle bg-primary text-white flex align-center justify-center font-lg":class="item.icon+' '+item.color " style="width: 100rpx; height: 100rpx;"></view><view class="font mt-1 text-light-muted">{{item.name}}</view></view></block></view><view class="font-md border-top border-light-secondary text-center py-2">取消</view></uni-popup></view> </template><script>export default {data(){return{btnList: [{"icon": 'icon-QQ',"color": 'bg-primary',"name": 'QQ好友'},{"icon": 'icon-QQ',"color": 'bg-primary',"name": 'QQ好友'},{"icon": 'icon-QQ',"color": 'bg-primary',"name": 'QQ好友'},{"icon": 'icon-QQ',"color": 'bg-primary',"name": 'QQ好友'}],}},methods:{open(){this.$refs.popup.open();},close(){this.$refs.popup.close();}}} </script><style> </style> <moreShare ref="share"></moreShare>onNavigationBarButtonTap() {this.$refs.share.open();},onBackPress() {this.$refs.share.close();},
  • 用官方組件分享動態(tài)渲染數(shù)據(jù), 子組件用created()

    created(){uni.getProvider({service: 'share',success: (e) => {console.log(e);let data = []for (let i = 0; i < e.provider.length; i++) {switch (e.provider[i]) {case 'weixin':data.push({name: '微信好友',id: 'weixin',icon:'icon-weixin',color:'bg-success',sort:0})data.push({name: '朋友圈',id: 'weixin',icon:'icon-huati',color:'bg-dark',type:'WXSenceTimeline',sort:1})break;case 'sinaweibo':data.push({name: '新浪微博',icon:'icon-xinlangweibo',color:'bg-danger',id: 'sinaweibo',sort:2})break;case 'qq':data.push({name: 'QQ好友',id: 'qq',icon:'icon-QQ',color:'bg-primary',sort:3})break;default:break;}}this.providerList = data.sort((x,y) => {return x.sort - y.sort});},fail: (e) => {console.log('獲取分享通道失敗', e);uni.showModal({content:'獲取分享通道失敗',showCancel:false})}});},
  • 分享方法

    async share(e) {console.log('分享通道:'+ e.id +'; 分享類型:' + this.shareType);if(!this.shareText && (this.shareType === 1 || this.shareType === 0)){uni.showModal({content:'分享內(nèi)容不能為空',showCancel:false})return;}if(!this.image && (this.shareType === 2 || this.shareType === 0)){uni.showModal({content:'分享圖片不能為空',showCancel:false})return;}let shareOPtions = {provider: e.id,scene: e.type && e.type === 'WXSenceTimeline' ? 'WXSenceTimeline' : 'WXSceneSession', //WXSceneSession”分享到聊天界面,“WXSenceTimeline”分享到朋友圈,“WXSceneFavorite”分享到微信收藏 type: this.shareType,success: (e) => {console.log('success', e);uni.showModal({content: '已分享',showCancel:false})},fail: (e) => {console.log('fail', e)uni.showModal({content: e.errMsg,showCancel:false})},complete:function(){console.log('分享操作結束!')}}switch (this.shareType){case 0:shareOPtions.summary = this.shareText;shareOPtions.imageUrl = this.image;shareOPtions.title = '歡迎體驗uniapp';shareOPtions.href = 'https://uniapp.dcloud.io';break;case 1:shareOPtions.summary = this.shareText;break;case 2:shareOPtions.imageUrl = this.image;break;case 5:shareOPtions.imageUrl = this.image ? this.image : 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b6304f00-5168-11eb-bd01-97bc1429a9ff.png'shareOPtions.title = '歡迎體驗uniapp';shareOPtions.miniProgram = {id:'gh_33446d7f7a26',path:'/pages/tabBar/component/component',webUrl:'https://uniapp.dcloud.io',type:0};break;default:break;}if(shareOPtions.type === 0 && plus.os.name === 'iOS'){//如果是圖文分享,且是ios平臺,則壓縮圖片 shareOPtions.imageUrl = await this.compress();}if(shareOPtions.type === 1 && shareOPtions.provider === 'qq'){//如果是分享文字到qq,則必須加上href和titleshareOPtions.href = 'https://uniapp.dcloud.io';shareOPtions.title = '歡迎體驗uniapp';}uni.share(shareOPtions);},

個人中心頁面開發(fā)

page.json配置

  • 配置page.json

    {"path": "pages/my/my","style": {"navigationBarTitleText": "我的","app-plus": {"titleNView": {"buttons": [{"type": "menu"}]}}}},

個人中心ui構建

  • 靜態(tài)開發(fā)第一個view

    <view class="flex align-center p-2"><image src="../../static/default.jpg" style="width: 100rpx; height: 100rpx;" class="rounded-circle"></image><view class="flex flex-column flex-1 px-2"><text class="font-lg font-weight-bold text-dark ">昵稱</text><text class="font text-muted mt-1"> 總帖子10 今日發(fā)帖0</text></view><view class="iconfont icon-jinru"></view></view>
  • 第二個view開發(fā),使用遍歷方式

    <view class="flex align-center px-3 py-2"><view class="flex-1 flex-column flex align-center justify-center" v-for="(item,index) in this.itemList " :key="index"><text class="font-lg text-dark">{{item.num}}</text><text class="text-muted fony">{{item.name}}</text></view></view>
  • 第三個view, 廣告位的開發(fā)

    <view class="px-3 py-2"><image src="/static/demo/banner1.jpg" style="height: 300rpx; width: 100%;" mode="aspectFill" class="rounded"></image></view>
  • 引入uni-list-item

    <uni-list-item title="瀏覽歷史" :showExtraIcon="true" :extra-icon="extraIcon1" link :border="false"></uni-list-item><uni-list-item title="社區(qū)認證" :showExtraIcon="true" :extra-icon="extraIcon2" link :border="false"></uni-list-item><uni-list-item title="審核帖子" :show-extra-icon="true" link :border="false"><text slot="icon" class="iconfont icon-keyboard font-lg"></text></uni-list-item>import uniListItem from '@/components/uni-list-item/uni-list-item.vue';extraIcon1: {type: 'eye',color: '#000000',size: 20},extraIcon2: {type: 'vip',color: '#000000',size: 20},

設置頁面開發(fā)

  • 新建頁面,導航進入

  • 退出登錄靜態(tài)開發(fā)

    <template><view><uni-list-item title="賬號與安全" link :border="false" ></uni-list-item><uni-list-item title="資料編輯" link :border="false" ></uni-list-item><uni-list-item title="清楚緩存" link :border="false"></uni-list-item><uni-list-item title="意見反饋" link :border="false"></uni-list-item><uni-list-item title="關于社區(qū)" link :border="false"></uni-list-item><view class="py-2 px-3"><button class="bg-main text-white" style="border-radius: 50rpx;">退出登錄</button></view></view> </template><script>import uniListItem from '@/components/uni-list-item/uni-list-item.vue';export default {components:{uniListItem},data() {return {}},methods: {}} </script><style></style>

修改密碼頁面開發(fā)

修改密碼UI界面開發(fā)

  • 新建頁面,導航進入

    <uni-list-item title="賬號與安全" link :border="false" @click="open"></uni-list-item>uni.navigateTo({url:'../userPassword/userPassword'})
  • 靜態(tài)頁面開發(fā)

    <view class="px-1"><input class="uni-input" value="" type="text" placeholder="輸入舊密碼"/><input class="uni-input" value="" type="text" placeholder="輸入新密碼"/><input class="uni-input" value="" type="text" placeholder="輸入確認密碼"/><view class="py-2 px-3"><button class="bg-main text-white" style="border-radius: 50rpx;">設置</button></view></view>

表單驗證功能實現(xiàn)

  • 輸入框綁定vue, disabled屬性綁定

    computed:{disable(){return this.oldPassword===''||this.newPassword===''||this.renewPassword==='';}},<button class="bg-main text-white" style="border-radius: 50rpx;" :disabled="disable">設置</button>
  • 驗證功能實現(xiàn)

    check(){if(this.newPassword!==this.renewPassword){uni.showToast({title:'兩次輸入密碼不一致',icon:"none"})return false;}return true;},submit(){if(this.check()){console.log('提交成功');}}

修改郵箱頁面開發(fā)

修改郵箱頁UI界面開發(fā)

  • 新建頁面, 配置page.json

    ,{"path" : "pages/userEmail/userEmail","style" : {"navigationBarTitleText": "設置郵箱"}}
  • 拼接字符串, 配置導航,引號不一樣用1左邊的那個,${}拼接

    open(path){uni.navigateTo({url:`../${path}/${path}`,fail(e) {console.log(e);}})}
  • 靜態(tài)頁面開發(fā),與修改密碼差不多的功能,禁用

    <template><view><input type="text" class="uni-input" placeholder="請輸入郵箱" v-model="email"/><input type="text" class="uni-input" placeholder="請輸入密碼" v-model="password"/><button class="bg-main text-white mt-1" style="border-radius: 50rpx;" :disabled="disable">綁定郵箱</button></view> </template><script>export default {data() {return {email:'',password:''}},computed:{disable(){return this.email===''||this.password===''}},methods: {}} </script><style></style>

表單驗證功能實現(xiàn)

  • 利用正則表達式完成郵箱功能驗證js常用正則表達式

    methods: {check(){var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;if(!ePattern.test(this.email)){uni.showToast({title:'郵箱格式不正確',icon:"none"})return false;}return true;},submit(){if(this.check()){console.log("提交成功");}return;}}

編輯資料頁面開發(fā)

編輯資料UI界面實現(xiàn)

  • 新建頁面,配置page.json,配置導航

    ,{"path" : "pages/userInfo/userInfo","style" : {"navigationBarTitleText": "資料編輯"}}
  • 使用uni-list-item實現(xiàn)靜態(tài)頁面,使用插槽修改

    <template><view><uni-list-item title="頭像" :border="false" ><view slot="right" class="flex"><image class="rounded" style="width: 100rpx; height: 100rpx;" src="../../static/default.jpg"></image><text class="flex align-center iconfont icon-bianji1 ml-2" ></text></view></uni-list-item><uni-list-item title="昵稱" :border="false"><view slot="right" class="flex ">哈哈<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><uni-list-item title="性別" :border="false"><view slot="right" class="flex ">未知<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><uni-list-item title="生日" :border="false"><view slot="right" class="flex ">2021-4-1<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><uni-list-item title="情感" :border="false"><view slot="right" class="flex ">已婚<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><uni-list-item title="職業(yè)" :border="false"><view slot="right" class="flex align-center">程序員<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><uni-list-item title="家鄉(xiāng)" :border="false"><view slot="right" class="flex ">廣東廣州<text class="flex align-center iconfont icon-bianji1 ml-2 " ></text></view></uni-list-item><view class="py-2 px-3"><button class="bg-main text-white" style="border-radius: 50rpx;">完成</button></view></view> </template><script>import uniListItem from '@/components/uni-list-item/uni-list-item.vue';export default {components:{uniListItem},data() {return {}},methods: {}} </script><style></style>

修改頭像功能

  • 添加點擊事件, 動態(tài)綁定userPIc

    <uni-list-item title="頭像" :border="false"><view slot="right" class="flex"><image class="rounded" style="width: 100rpx; height: 100rpx;" :src="userPic"></image><text class="flex align-center iconfont icon-bianji1 ml-2" @click="changePic" ></text></view></uni-list-item>
  • uni.chooseImage的使用, 修改頭像功能實現(xiàn)

    changePic(){uni.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:(e)=>{this.userPic=e.tempFilePaths[0];}})}

showActionSheet接口使用

  • 修改昵稱,用輸入框

    <input v-model="nickname" class="text-right"/>
  • 修改性別, 使用showActionSheet,使用計算屬性渲染

    <uni-list-item title="性別" :border="false"><view slot="right" class="flex ">{{sexText}}<text class="flex align-center iconfont icon-bianji1 ml-2 " @click="changeSex"></text></view></uni-list-item>const sexArray=["保密","男","女"];sex:0,sexText(){return sexArray[this.sex];},changeSex(){uni.showActionSheet({itemList:sexArray,success:(e)=>{// this.sex=sexArray[e.tapIndex];this.sex=e.tapIndex;}})},
  • 修改情感, 使用一樣的方法

  • 修改職業(yè), 使用一樣的方法

    changeJob(){uni.showActionSheet({itemList:jobArray,success:(e)=>{this.job=jobArray[e.tapIndex];}})}

修改生日功能實現(xiàn)

  • 使用picker,完成該功能

    <picker mode="date" :value="birthday" @change="onDateChange"><uni-list-item title="生日" :border="false"><view slot="right" class="flex ">{{birthday}}<text class="flex align-center iconfont icon-bianji1 ml-2 "></text></view></uni-list-item></picker>onDateChange(e){this.birthday=e.detail.value;}

三級城市聯(lián)動多列選擇器選擇城市

  • 使用官方組件mpvueCityPicker

    <uni-list-item title="家鄉(xiāng)" :border="false"><view slot="right" class="flex ">{{pickerText}}<text class="flex align-center iconfont icon-bianji1 ml-2 " @click="showCityPicker"></text></view></uni-list-item><mpvue-city-picker :themeColor="themeColor" ref="mpvueCityPicker" :pickerValueDefault="cityPickerValueDefault"@onConfirm="onConfirm"></mpvue-city-picker>import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'mpvueCityPickerthemeColor:'#007AFF',cityPickerValueDefault:[0, 0, 1],pickerText:'廣東廣州'onBackPress() {if (this.$refs.mpvueCityPicker.showPicker) {this.$refs.mpvueCityPicker.pickerCancel();return true;}},onUnload() {if (this.$refs.mpvueCityPicker.showPicker) {this.$refs.mpvueCityPicker.pickerCancel()}},onConfirm(e){this.pickerText = e.label;},showCityPicker(){this.$refs.mpvueCityPicker.show()}

幫助反饋頁面開發(fā)

幫助反饋UI界面實現(xiàn)

  • 新建頁面,配置page.json

  • 使用組件uni-collapse

    <view><uni-collapse accordion><uni-collapse-item title="默認開啟" ><text>折疊內(nèi)容</text></uni-collapse-item><uni-collapse-item title="默認開啟" ><text>折疊內(nèi)容</text></uni-collapse-item></uni-collapse><view class="py-2 px-3"><button class="bg-main text-white" style="border-radius: 50rpx;">意見反饋</button></view></view>

關于頁面開發(fā)

關于頁面UI界面

  • 新建頁面,配置page.json

  • 靜態(tài)頁面開發(fā)

    <view><view class="flex align-center justify-center flex-column pt-4 pb-3"><image src="../../static/common/nothing.png" style="width: 300rpx; height: 300rpx;" class="rounded-circle"></image><text class="font text-muted mt-2">version 1.0.1</text></view><uni-list-item title="新版本檢測" :border="false" link></uni-list-item><uni-list-item title="社區(qū)用戶協(xié)議" :border="false" link></uni-list-item></view>

登錄頁開發(fā)

page.json配置

  • 新建頁面,取消原生導航,導航進入

    ,{"path" : "pages/login/login","style" : {"navigationBarTitleText": "","app-plus": {"titleNView": false}}}<navigator url="../login/login"><view class="flex align-center p-2" hover-class="bg-light"><image src="../../static/default.jpg" style="width: 100rpx; height: 100rpx;" class="rounded-circle"></image><view class="flex flex-column flex-1 px-2"><text class="font-lg font-weight-bold text-dark ">昵稱</text><text class="font text-muted mt-1"> 總帖子10 今日發(fā)帖0</text></view><view class="iconfont icon-jinru"></view></view></navigator>
  • x的樣式開發(fā)

    <view class="flex iconfont icon-guanbi algin-center justify-center font-lg " style="width: 100rpx; height: 100rpx;position: fixed; left: 0;":style="'top:'+statusBarHeight+'px;'" hover-class="bg-light" @click="back"></view>var res=uni.getSystemInfoSync();this.statusBarHeight=res.statusBarHeight;back(){uni.navigateBack({delta:1})}

登錄頁UI界面構建

  • 對之前的開發(fā)進行修改,引用一個view代替狀態(tài)欄即可

    <template><view><view class="status_bar"><!-- 這里是狀態(tài)欄 --></view><view> 狀態(tài)欄下的文字 </view></view> </template> <style>.status_bar {height: var(--status-bar-height);width: 100%;} </style>
  • 靜態(tài)頁面開發(fā)

    <view class="flex iconfont icon-guanbi algin-center justify-center font-lg " style="width: 100rpx; height: 100rpx;position: fixed; left: 0;" hover-class="bg-light" @click="back"></view><view class="flex algin-center justify-center " style="margin-top: 300rpx;"><text class="text-secondary " style="font-size: 60rpx;">賬號密碼登錄</text></view><view class="flex algin-center border-bottom py-3 px-2 " style="margin-top: 100rpx;"><input type="text" placeholder="昵稱/手機號/郵箱" class="" /></view><view class="flex algin-center border-bottom"><input type="text" placeholder="請輸入密碼" class="py-3 px-2 flex-1" /><text style="width: 150rpx;" class="text-muted py-3">忘記密碼</text></view><view class="py-2 px-3 " style="margin-top: 100rpx;"><button class="bg-main text-white" style="border-radius: 50rpx;">登錄</button></view><view class="mt-5 flex algin-center justify-center"><view class="text-primary pr-2">驗證碼登錄</view><view class="text-secondary">|</view><view class="text-primary pl-2">登錄遇到問題</view></view><view class="flex algin-center justify-center mt-5"><view style="width: 100rpx; border-bottom: solid #ddd ;" class="mb-2" ></view><view class="text-muted mx-2">社交賬號登錄</view><view style="width: 100rpx; border-bottom: solid #ddd ; "class="mb-2" ></view></view>

登錄類型切換效果實現(xiàn)

  • 靜態(tài)開發(fā)圖標列表

    <view class="flex align-center px-5 py-3" style="padding-left: 100rpx; padding-right: 100rpx;"><view class="flex-1 flex align-center justify-center"><viewclass="iconfont icon-QQ font-lg bg-primary text-white flex align-center justify-center rounded-circle "style="width: 100rpx;height: 100rpx;"></view></view><view class="flex-1 flex align-center justify-center "><viewclass="iconfont icon-QQ font-lg bg-primary text-white flex align-center justify-center rounded-circle"style="width: 100rpx;height: 100rpx;"></view></view><view class="flex-1 flex align-center justify-center "><viewclass="iconfont icon-QQ font-lg bg-primary text-white flex align-center justify-center rounded-circle"style="width: 100rpx;height: 100rpx;"></view></view></view><view class="flex algin-center justify-center px-5 text-muted">注冊即代表同意<text class="text-primary">《xxx社區(qū)協(xié)議》</text></view>
  • 切換驗證碼的靜態(tài)顯示

    <view class="flex algin-center justify-center " style="margin-top: 300rpx;"><text class="text-secondary " style="font-size: 60rpx;">{{status?'賬號密碼登錄':'驗證碼登錄'}}</text></view><template v-if="status"><view class="flex algin-center border-bottom py-3 px-2 " style="margin-top: 100rpx;"><input type="text" placeholder="昵稱/手機號/郵箱" class="" /></view><view class="flex algin-center border-bottom"><input type="text" placeholder="請輸入密碼" class="py-3 px-2 flex-1" /><text style="width: 150rpx;" class="text-muted py-3">忘記密碼</text></view></template><template v-else><view class="flex algin-center border-bottom py-3 px-2 " style="margin-top: 100rpx;"><text class="text-dark mr-2">+86</text><input type="text" placeholder="手機號" class="" /></view><view class="flex algin-center border-bottom px-2"><input type="text" placeholder="請輸入驗證碼" class="py-3 px-2 flex-1" /><text style="width: 200rpx;" class="text-white bg-main py-3 flex justify-center">獲取驗證碼</text></view></template>changeStatus(){this.status=!this.status}

表單基礎功能實現(xiàn)

  • 輸入框綁定內(nèi)容,計算屬性disable要對于賬號密碼與手機驗證碼都ok

    <input type="text" placeholder="昵稱/手機號/郵箱" v-model="username" class="" />disabled(){if((this.username===''||this.password==='')&&(this.phone===''||this.code==='')){return true;}return false;}<button class="bg-main text-white" style="border-radius: 50rpx;" :disabled="disabled">登錄</button>
  • 切換登錄方式要初始化表單

    initForm(){this.username='';this.password='';this.phone='';this.code='';},changeStatus(){this.initForm();this.status=!this.status}
  • 獲取驗證碼的功能, 倒計時的功能

    getCode(){if(this.codeTime>0){return;}this.codeTime=60;let timer=setInterval(()=>{if(this.codeTime>=1){this.codeTime--;}else{this.codeTime=0;clearInterval(timer);}},1000)}<text style="width: 200rpx;" class="text-white py-3 flex justify-center" @click="getCode":class="codeTime>0?'bg-main-disable':'bg-main'">{{codeTime>0?this.codeTime+'s':'獲取驗證碼'}}</text>
  • 驗證手機號規(guī)則編寫,用正則表達式驗證, 提交方法綁定

    getCode() {if (this.codeTime > 0) {return;}if(!this.validate()){return;}this.codeTime = 60;let timer = setInterval(() => {if (this.codeTime >= 1) {this.codeTime--;} else {this.codeTime = 0;clearInterval(timer);}}, 1000)},validate() {var mPattern = /^1[34578]\d{9}$/;var flag = mPattern.test(this.phone)// console.log(flag);if (!flag) {uni.showToast({title: '手機格式不正確',icon: "none"})return false;}return true;},submit() {if(!this.validate()){return;}console.log('驗證成功');this.validate();}

第三方登錄組件功能實現(xiàn)

  • 新建other-login組件,實現(xiàn)第三方登錄

    <template><view class="flex align-center px-5 py-3" style="padding-left: 100rpx; padding-right: 100rpx;"><view class="flex-1 flex align-center justify-center" v-for="(item,index) in this.resultList" :key="index"><view :class="item.icon+' '+item.bgColor"class="iconfont font-lg text-white flex align-center justify-center rounded-circle "style="width: 100rpx;height: 100rpx;"></view></view></view> </template><script>export default{data(){return {providerList: [],resultList:[]}},mounted() {uni.getProvider({service: 'oauth',success: (result) => {this.providerList = result.provider.map((value) => {let providerName = '';let icon='';let bgColor='';switch (value) {case 'weixin':providerName = '微信登錄'icon='icon-weixin';bgColor='bg-success';break;case 'qq':providerName = 'QQ登錄';icon='icon-QQ';bgColor='bg-primary';break;case 'sinaweibo':providerName = '新浪微博登錄'icon='icon-xinlangweibo';bgColor='bg-danger';break;default:break;}return {name: providerName,id: value,icon:icon,bgColor:bgColor}});console.log(this.providerList);for(var i=0;i<this.providerList.length;i++){if(this.providerList[i].id==='weixin'||this.providerList[i].id==='qq'||this.providerList[i].id==='sinaweibo'){this.resultList.push(this.providerList[i]);}}console.log(this.resultList);},fail: (error) => {console.log('獲取登錄通道失敗', error);}});}} </script><style> </style>

個人空間開發(fā)

page.json配置

  • 新建頁面, 配置導航欄按鈕,導航進入

    ,{"path" : "pages/user-space/user-space","style" : {"navigationBarTitleText": "","app-plus": {"titleNView": {"titleText": "個人空間","buttons": [{"type": "menu"}]}}}}openSapce() {uni.navigateTo({url:'../../pages/user-space/user-space'})},

個人空間頭部開發(fā)

  • 靜態(tài)開發(fā)

    <view class="flex align-center justify-center p-3 border-bottom border-light-secondary"><image src="../../static/default.jpg" class="rounded " style="width: 180rpx; height: 180rpx;"></image><view class="flex flex-column flex-1 align-center justify-center " ><view class="flex align-center justify-center " style="width: 400rpx;"><view class=" flex-1 flex align-center justify-center flex-column "><text class="font-lg font-weight-bold">1</text><text class="font text-muted">粉絲</text></view><view class=" flex flex-1 align-center justify-center flex-column"><text class="font-lg font-weight-bold">1</text><text class="font text-muted">粉絲</text></view><view class=" flex flex-1 align-center justify-center flex-column"><text class="font-lg font-weight-bold">1</text><text class="font text-muted">粉絲</text></view></view><view class="flex align-center justify-center pt-2"><button class="bg-main text-white" style="width: 400rpx;">關注</button></view></view></view>

個人空間UI界面實現(xiàn)

  • 借用好友列表的tabBar

    <view class="flex align-center py-4" style="height: 100rox;"><text class="flex-1 flex align-center justify-center" v-for="(item,index) in tabBars" :key="index":class="tabIndex===index?'font-lg text-main font-weight-bold':'font-md text-dark'"@click="changeTab(index)">{{item.name}}</text></view>data() {return {tabIndex:0,tabBars: [{name: '主頁',},{name: '帖子',},{name: '動態(tài)',}]}},changeTab(index){this.tabIndex=index;}
  • 主頁的實現(xiàn)

    <template v-if="tabIndex===0"><view class="px-3 border-bottom py-2"><view class="font-md">賬號信息</view><view class="font">賬號年齡:12個月</view><view class="font">賬號id:1</view></view><view class="px-3 border-bottom py-2"><view class="font-md">個人信息</view><view class="font">星座:天蝎座</view><view class="font">職業(yè):IT</view><view class="font">故鄉(xiāng):中國</view><view class="font">情感:未婚</view></view></template><template v-else><text>帖子/動態(tài)</text></template>
  • 帖子動態(tài)的實現(xiàn), 引入commonlist組件,loadMore組件,引入方法,添加動畫效果

    <view class="animated fast fadeIn"><block v-for="(item,index) in list" :key="index"><commonList :item="item" :index="index" @follow="follow" @doSupport="doSupport"></commonList><divider></divider></block><loadMore :loading="loading"></loadMore></view>follow(index) {let obj=this.tabBars[this.tabIndex].list[index];obj.isFollow=true;uni.showToast({title: '關注成功'})},doSupport(e) {let obj=this.tabBars[this.tabIndex].list[e.index]console.log(obj);if (obj.support.type === '') {//無操作obj.support[e.type + '_count']++;} else if (obj.support.type === 'support' && e.type === 'unsupport') {//之前是頂,頂減一,踩加一obj.support.support_count--;obj.support.unsupport_count++;} else if (obj.support.type === 'unsupport' && e.type === 'support') {//之前是踩,頂加一,踩減一obj.support.support_count++;obj.support.unsupport_count--;}obj.support.type = e.type;let msg = e.type === 'support' ? '頂' : '踩';uni.showToast({title: msg + '成功'})},

個人空間操作菜單

  • 使用彈出層,進行修改即可

    <uni-popup ref="popup" type="top" background-color="#fff"><view class="flex justify-center align-center font-md border-bottom py-2" hover-class="bg-light"@click="popupEvent('findFriend')"><text class="iconfont icon-sousuo mr-2" ></text>加入黑名單</view><view class="flex justify-center align-center font-md py-2" hover-class="bg-light"@click="popupEvent('deleteList')"><text class="iconfont icon-shanchu mr-2"></text>聊天</view></uni-popup>onNavigationBarButtonTap() {this.$refs.popup.open();},

全局功能開發(fā)

清楚緩存的功能

  • 添加點擊事件,清除緩存的方法

==文檔只有一些功能缺失,但源碼已經(jīng)完善所有功能,詳情請點擊碼云地址下載源碼學習 https://gitee.com/HelLichu/friend ==

總結

以上是生活随笔為你收集整理的使用uniapp开发社区交友网站的项目教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久久96 | 久久久久久网站 | 国产不卡毛片 | 欧美激情精品久久久久久免费印度 | 亚洲激情电影在线 | 中文字幕一区二区三区久久 | 亚洲精品国产精品久久99热 | www.色的| 91试看 | 91视频免费播放 | 日韩精品在线看 | 日韩系列在线 | 69久久久久久久 | a天堂免费| 九色精品免费永久在线 | 欧美性色黄大片在线观看 | 草久久久久久 | 久久久精品日本 | 成人免费影院 | 国产一区视频导航 | 久久久资源网 | 久久草在线精品 | 狠狠gao| 免费在线观看国产黄 | 国产首页 | 亚洲欧洲国产精品 | 日韩精品久久久久久中文字幕8 | 国产精品18久久久久久不卡孕妇 | 777xxx欧美| 精品色综合| 亚洲 综合 专区 | 午夜精品福利一区二区三区蜜桃 | 国产精品国产亚洲精品看不卡15 | 久久国语露脸国产精品电影 | 日韩在线观看第一页 | 国产中文a | 夜夜操天天 | 国产69精品久久久久9999apgf | 毛片www | 亚洲永久精品视频 | 精品亚洲一区二区三区 | 色婷婷视频在线 | 毛片3| 天天射天天操天天干 | 永久免费毛片在线观看 | 亚洲国产欧洲综合997久久, | 日韩中文在线播放 | 久久av免费电影 | 久久精品视频网址 | 国产特级毛片 | 亚洲一区天堂 | 中文字幕中文中文字幕 | 欧美日韩精品免费观看视频 | 中日韩在线 | 色九九影院 | 久久久久久久久久久影视 | 天天操天天操天天 | 五月天欧美精品 | 国产免费久久 | 久久久片 | 国产高清av免费在线观看 | 国产免费午夜 | 久久一区二区三区国产精品 | 国产成人综合在线观看 | 久草在线国产 | 久久久久女人精品毛片九一 | 99精品色 | 在线观看成人毛片 | 91在线永久 | 久久久久久久久久福利 | 日本夜夜草视频网站 | 日本黄色免费大片 | 免费在线看v| 激情深爱五月 | 亚洲激情综合 | 美女网站色在线观看 | 国产精品女人网站 | 蜜臀久久99静品久久久久久 | 亚洲国产精品va在线看 | 日本在线精品视频 | 色婷婷综合视频在线观看 | 免费看国产一级片 | 你操综合 | 黄p在线播放 | 99c视频在线| 国产99久久精品一区二区300 | 中文国产成人精品久久一 | 欧美一级片在线免费观看 | 亚洲japanese制服美女 | 中文在线字幕观看电影 | 中文字幕一区在线观看视频 | 狠狠色丁香婷婷综合久久片 | 久久久噜噜噜久久久 | 玖玖视频国产 | 香蕉视频在线观看免费 | 狠狠色狠狠色合久久伊人 | 伊人五月天.com | 在线观看免费av网 | 国产精品久久久久久久久久妇女 | 成人 亚洲 欧美 | 久久免费美女视频 | 久久久精品国产免费观看同学 | 在线免费观看麻豆视频 | 精品视频资源站 | 九九亚洲视频 | 91亚洲精品国产 | 超碰97成人| 国产一级片毛片 | 久久99精品热在线观看 | 久久午夜剧场 | 在线成人免费电影 | 色多视频在线观看 | 亚州视频在线 | 毛片一区二区 | av大全在线看 | 青青看片 | 一区在线免费观看 | 日韩网站免费观看 | 四虎在线免费观看 | 夜夜操网 | 欧美激情精品久久久 | 久久久久久久久久久黄色 | 97av在线视频免费播放 | 五月色婷 | 欧美成人高清 | 日韩精品中文字幕久久臀 | 亚洲美女免费精品视频在线观看 | 在线看片a| 97在线看片 | 天天躁天天躁天天躁婷 | 麻豆手机在线 | 国产在线日本 | 国产精品手机播放 | 精品一区 在线 | 久久久久黄 | 亚洲一区 av | 日日夜夜天天综合 | 丁香激情婷婷 | 欧美色黄| 成人wwwxxx视频 | 天天干夜夜擦 | 六月天色婷婷 | 国产一区在线免费观看视频 | 香蕉免费在线 | 99久久99视频只有精品 | 精品福利网 | 国产麻豆精品95视频 | 在线国产视频观看 | 九九久久国产 | 九九有精品 | 中文字幕首页 | 娇妻呻吟一区二区三区 | 欧美国产精品久久久久久免费 | 色丁香婷婷| 亚洲高清av在线 | 2019av在线视频 | 日韩免费看的电影 | 久久夜色精品国产欧美乱 | 四虎成人网 | 911国产 | 在线91av| 在线免费观看视频 | 国产一区网 | 最近中文字幕国语免费av | 日本免费一二三区 | 99国产视频 | 91精品啪啪 | 日韩最新av在线 | 91精品秘密在线观看 | 色视频在线观看免费 | 九九热视频在线免费观看 | 日韩av片无码一区二区不卡电影 | 久久精品二区 | 婷婷激情五月 | 综合久久久久久久 | 在线观看一区二区视频 | 99久久精品国产毛片 | 免费黄色特级片 | 免费的黄色的网站 | 亚洲无人区小视频 | 国产亚洲精品无 | 久久久久9999亚洲精品 | www.天天色.com | 91精品秘密在线观看 | 国产1区在线 | 成人在线超碰 | 亚洲小视频在线 | 国产精彩视频一区 | 国产视频每日更新 | 综合网色 | 综合伊人久久 | 天天插综合网 | 91资源在线观看 | 91大神在线看 | 免费热情视频 | 成人影片在线播放 | 在线免费av观看 | 最近中文字幕久久 | 久久久国产精品网站 | 福利久久 | 中文字幕在线不卡国产视频 | 精品国产大片 | 天天操福利视频 | 日韩精品一区二区三区在线视频 | 在线观看中文字幕一区二区 | 免费日韩三级 | 91久久国产露脸精品国产闺蜜 | 香蕉影院在线观看 | www.eeuss影院av撸 | 狠狠亚洲| 激情在线网址 | 久久久久久久久久久电影 | 日韩av中文字幕在线 | 中文字幕免费高 | 日本3级在线观看 | 久久精品美女视频网站 | 久久国产高清 | 午夜电影久久 | 国产99久久久国产精品成人免费 | 久久超碰97| 天堂av在线7 | 精品国内 | 天天超碰 | 亚洲国产高清视频 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久伊人操 | 精品免费观看 | 五月婷婷六月丁香 | 精品成人网 | 久久婷五月 | 国产精品毛片久久蜜 | www免费在线观看 | 久久久99久久 | 激情视频二区 | 成人在线视频你懂的 | 欧美日韩高清一区 | 亚洲精品中文字幕在线观看 | 超碰在线观看99 | 激情丁香综合五月 | 91精品一区二区三区蜜臀 | 色www免费视频 | 免费瑟瑟网站 | 久久男人影院 | a级片网站 | 欧美精品午夜 | 黄色aa久久 | 狠狠天天| 国产精品视频在线看 | 日韩精品一区不卡 | 国产视频精品在线 | 人人澡人摸人人添学生av | 美女久久视频 | 伊人婷婷激情 | 亚洲成人动漫在线观看 | 国产在线色站 | 五月天亚洲综合小说网 | 亚洲日日夜夜 | 日本韩国精品在线 | 97超碰在线人人 | 中文字幕在线观看免费高清完整版 | 亚洲韩国一区二区三区 | 香蕉视频免费看 | 久久无码精品一区二区三区 | 18岁免费看片 | 精品久久久久久久久久 | 国产精品国产三级国产不产一地 | 国产高清日韩 | 国产成人资源 | 日韩videos | 亚洲视频免费 | 国产极品尤物在线 | 狠狠躁夜夜a产精品视频 | 欧美一级免费高清 | 久久国产精品99久久久久久丝袜 | 欧美成人69av | 久久久国产电影 | 国产精品一区久久久久 | 久久99精品国产91久久来源 | 天天干天天想 | 精品国产精品国产偷麻豆 | 97超碰人人模人人人爽人人爱 | av电影久久 | 天天玩天天干 | 九九九九精品 | 国产四虎在线 | 91精品91 | 亚洲免费观看视频 | 久草国产视频 | 精品国产区在线 | 丝袜美腿亚洲 | 日日爽天天 | a天堂最新版中文在线地址 久久99久久精品国产 | 国产伦理一区二区三区 | 福利二区视频 | 色综合天天 | 婷婷在线色 | 日韩在线二区 | 日韩久久精品一区二区 | 亚洲首页| 在线之家免费在线观看电影 | 国产91精品久久久久久 | 91麻豆精品国产91久久久久久久久 | 国产精品免费久久久久久 | 亚洲高清在线观看视频 | 91视频国产免费 | 久久99久久99精品免视看婷婷 | 在线观看岛国av | 国产黄色在线网站 | av中文电影 | 午夜狠狠干 | 最新av免费 | 精品在线一区二区三区 | 色爱成人网 | 中文字幕在线成人 | 99国产在线 | 久久久久福利视频 | 日韩精品在线视频 | 黄色软件大全网站 | 五月婷网 | 久久国产电影院 | 最新av免费在线 | 九九九免费视频 | 色a综合 | 人人爽人人爽人人片 | 美女久久久久久久久久久 | 99热在线精品观看 | 久久久久免费视频 | 青草视频在线免费 | 国产精品一区二区免费在线观看 | 午夜精品久久久久久久爽 | 久章草在线观看 | 国产精品嫩草69影院 | 国产一区高清在线观看 | 免费一区在线 | 最近2019好看的中文字幕免费 | 91成人精品一区在线播放69 | 色在线免费视频 | 欧美久久久一区二区三区 | 99在线热播精品免费99热 | 日韩电影中文,亚洲精品乱码 | 国产精品区在线观看 | 女人18精品一区二区三区 | 国产一二三四在线视频 | 91精品国产高清自在线观看 | 国产韩国日本高清视频 | 日日夜精品 | 亚洲人成影院在线 | 99色在线视频 | 久久九九免费 | 国产精品综合在线观看 | 中文字幕在线视频第一页 | 久草| 日本一区二区三区免费看 | 色视频网页 | 欧美污网站 | 国产成人一区在线 | 亚洲国产天堂av | av中文在线观看 | 成人夜晚看av| 久久久午夜精品理论片中文字幕 | 亚洲精品中文字幕在线 | 女人18毛片90分钟 | 欧美最新大片在线看 | 日韩在线观看中文字幕 | 中文字幕资源在线 | 在线看的av网站 | 精品国产电影一区二区 | 五月天激情视频在线观看 | 国产成人区| 久久综合九色综合网站 | 国产成人精品亚洲日本在线观看 | 亚洲精品久 | 毛片网站观看 | 久久久久欧美精品999 | 精品福利av| 久久综合九色综合久99 | 99久久免费看 | 西西444www大胆高清图片 | 韩国视频一区二区三区 | 韩日精品视频 | 国产精品资源网 | 新版资源中文在线观看 | 色99网 | 天海翼一区二区三区免费 | 波多野结衣一区 | 欧美一区二区三区在线 | 日韩午夜电影 | 国产精品对白一区二区三区 | 日韩在线免费播放 | 亚洲一区精品二人人爽久久 | 亚洲欧美日韩精品久久奇米一区 | 国产精品免费观看在线 | 久草免费在线 | 91高清不卡 | 亚洲国产精品99久久久久久久久 | 日韩大片在线免费观看 | 黄污网站在线观看 | 精品嫩模福利一区二区蜜臀 | 免费视频一区二区 | 国产高清不卡在线 | 黄色在线免费观看网址 | 日韩欧美在线中文字幕 | 亚一亚二国产专区 | 麻豆激情电影 | 国产99一区视频免费 | 香蕉精品视频在线观看 | 97色噜噜| 亚洲电影免费 | 又爽又黄又无遮挡网站动态图 | 日韩最新理论电影 | www.综合网.com| 欧美日韩国产在线精品 | 亚洲国产精品500在线观看 | 中文字幕在线免费观看视频 | 国产精品自产拍在线观看蜜 | 精品成人在线 | 国产手机在线视频 | 中国黄色一级大片 | 中文字幕av网站 | 黄色软件视频大全免费下载 | 日韩在线欧美在线 | 国产精品黄色影片导航在线观看 | 国产日韩精品一区二区 | 日日操操操 | 91在线91拍拍在线91 | 亚洲国产精品成人精品 | 日韩videos高潮hd | 黄色大片国产 | 久久久成人精品 | 日日夜夜中文字幕 | 激情导航 | 91自拍成人 | 91九色综合 | 麻豆免费在线播放 | 丁香视频免费观看 | 免费观看午夜视频 | 一本色道久久综合亚洲二区三区 | 亚洲一区二区三区四区精品 | 久久中文欧美 | 婷婷久久综合九色综合 | 国产不卡毛片 | 精品视频在线免费观看 | 亚洲电影自拍 | 国产四虎在线 | 四虎影视精品永久在线观看 | 久久免费视频5 | 在线观看中文字幕第一页 | 99精品视频播放 | 国产精品免费看久久久8精臀av | 婷婷色av| 国产一级特黄毛片在线毛片 | 91大神电影 | 99视频久久 | 国产91精品在线播放 | 一区二区三区四区在线免费观看 | 最近免费中文视频 | 97碰视频| 久久99精品波多结衣一区 | 玖玖玖影院 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 精品国产一区二区三区噜噜噜 | 国内精品久久久久久久久久久久 | 国产区高清在线 | 精品久久久久一区二区国产 | 日日天天av | 国产精品国产毛片 | 国产福利av | 激情五月婷婷网 | 亚洲少妇自拍 | 在线视频18在线视频4k | 国产视频中文字幕在线观看 | 不卡的一区二区三区 | 五月婷婷丁香六月 | 国产亚州精品视频 | 久久男人视频 | 国产日本高清 | 日韩超碰在线 | 婷婷av色综合 | 免费网站黄| 国产日韩在线看 | 国产中年夫妇高潮精品视频 | 中午字幕在线观看 | 色综合狠狠干 | 97超碰精品 | 亚洲国产精品va在线看黑人动漫 | 色老板在线 | 精品一区二区三区香蕉蜜桃 | 9在线观看免费高清完整版 玖玖爱免费视频 | 99视频免费看 | 在线观看www. | 国产精品www | 国产精品96久久久久久吹潮 | 日韩精选在线观看 | 在线激情av电影 | 91精品久久久久久久久久久久久 | 日韩中文字幕国产 | 免费网站看av片 | 国产啊v在线观看 | 日本中文字幕一二区观 | 成人性生交大片免费看中文网站 | 丁香综合激情 | 国产精品久久精品国产 | 五月婷婷丁香色 | 成人一级| 91最新网址在线观看 | 91麻豆精品久久久久久 | 久久免费观看少妇a级毛片 久久久久成人免费 | 欧美精品中文在线免费观看 | 国产精品初高中精品久久 | 月丁香婷婷 | 日韩在线视频网站 | 免费看的毛片 | 欧美日本国产在线观看 | 国产三级av在线 | 欧美日韩午夜爽爽 | 国产福利av| 免费福利在线观看 | av成人动漫| 国产黄色大片免费看 | 黄色三级在线看 | 国产永久网站 | 最近中文字幕高清字幕在线视频 | 四虎影视欧美 | 国产99免费 | 亚洲午夜精品久久久久久久久 | 免费aa大片 | 久久不卡视频 | 91精品人成在线观看 | 国产免费二区 | 九九九在线观看视频 | 日本黄色大片免费看 | 国产一级黄色片免费看 | 久久精品视 | 欧美一区二区在线免费看 | 91在线看黄 | 国产精品大尺度 | 日韩超碰在线 | 亚洲精品在线网站 | 99久久99久久免费精品蜜臀 | 综合激情伊人 | 国产黑丝一区二区三区 | 国产乱视频 | 亚洲精品av中文字幕在线在线 | 五月婷婷激情六月 | 国产视频高清 | 亚洲精品视频在线播放 | 干狠狠| 波多野结衣精品视频 | 一区二区三区免费播放 | 青草视频在线看 | 人人超碰97 | 丁香花在线观看视频在线 | 九九久久视频 | 99久久超碰中文字幕伊人 | 麻豆91精品 | 超碰com| 一区 二区 精品 | 欧美日韩在线免费视频 | 精品综合久久 | 四虎国产精品永久在线国在线 | 亚洲精品在线一区二区 | 免费看国产a | 国产精品久久久久久久久久直播 | 国产探花 | 999电影免费在线观看2020 | 日日爱夜夜爱 | 99热日本 | 韩国三级av在线 | 亚洲精品美女免费 | 黄色a在线观看 | 1000部18岁以下禁看视频 | 久久人人精 | 高清av在线 | 日韩成人免费观看 | av天天澡天天爽天天av | 美女久久久久久 | 国产在线一区二区三区播放 | 久久久久久蜜av免费网站 | 在线亚洲日本 | 91刺激视频 | 成人午夜电影在线 | 亚洲国产福利视频 | 国产麻豆电影在线观看 | 亚洲男男gaygay无套同网址 | 国产九九九精品视频 | 激情欧美国产 | 国产中出在线观看 | 久草在线免费资源 | 欧美高清视频不卡网 | 夜夜摸夜夜爽 | 亚洲一区二区三区四区在线视频 | 国产精品美女久久久网av | 91九色porny在线 | 久久伊人91 | 亚洲春色奇米影视 | 一区二区视频在线看 | 玖玖视频免费在线 | av观看久久久 | 中文字幕人成一区 | 四月婷婷在线观看 | 国产一区二区精品久久91 | 国产成人精品aaa | 久久影视一区 | 欧美日韩高清在线一区 | 免费观看黄 | 欧美一区二区三区特黄 | 中文字幕九九 | 国产精品美女久久久网av | 黄色三级网站在线观看 | 国产1区2 | 成人免费影院 | 国产精品伦一区二区三区视频 | 国产一区福利在线 | 在线播放亚洲激情 | 日韩在线观看中文字幕 | 五月天综合婷婷 | 日日综合网 | 毛片网站在线看 | 国产成视频在线观看 | 久久综合综合久久综合 | 成人免费观看视频大全 | 国产在线观看黄 | 久久久久女人精品毛片九一 | 国产一区二区三区免费视频 | 欧美电影在线观看 | 亚洲一区二区三区精品在线观看 | 国产麻豆果冻传媒在线观看 | 一区二区精品视频 | 91观看视频 | 久久久久久久久久网 | 久久爱资源网 | 国产成人精品在线播放 | 成人资源在线播放 | www.大网伊人| 欧美激情视频在线免费观看 | av免费观看高清 | 三级视频日韩 | 91免费看黄色 | 免费观看高清 | 九九综合九九综合 | 国产不卡毛片 | 日韩在线观看网址 | 免费看片在线观看 | 日本爱爱免费 | 精品国偷自产国产一区 | 日韩中文字幕电影 | 国产精品女同一区二区三区久久夜 | 伊人六月| 黄色毛片电影 | 国产精品系列在线观看 | 黄色视屏在线免费观看 | 免费网址在线播放 | 91免费黄视频 | 国产精品theporn | 81国产精品久久久久久久久久 | 国产日韩欧美视频 | 国产精品99久久久精品免费观看 | 99国产在线 | 日韩av中文字幕在线免费观看 | 久久情爱 | 国产在线观看地址 | 国产免费成人 | 成人小电影在线看 | 国产无区一区二区三麻豆 | 国产精品日韩久久久久 | 毛片a级片 | 91精品秘密在线观看 | 在线三级播放 | 久久久激情网 | 亚洲精品国产精品国自产在线 | japanesexxxhd奶水 91在线精品一区二区 | 2019国产精品| 免费看91的网站 | 5月丁香婷婷综合 | 韩日精品在线观看 | 91在线亚洲| 四虎成人精品在永久免费 | 婷婷国产一区二区三区 | 久久99国产视频 | 黄在线 | 久久99久久久久 | 日日干干夜夜 | 中文字幕乱视频 | 亚洲国内精品 | 久久久久亚洲天堂 | 激情婷婷 | 亚洲一级黄色 | 97国产视频 | 久久99精品久久久久久久久久久久 | av免费看av | 亚洲欧美日韩中文在线 | 天天在线视频色 | 人人躁 | 日本女人b| 欧美精品乱码久久久久久按摩 | 久久精品国产一区二区三 | 亚洲电影一区二区 | 成人av资源 | 在线日韩| 国产精品网址在线观看 | 一区二区三区免费在线 | 99久久综合狠狠综合久久 | 日韩电影精品 | 懂色av一区二区在线播放 | 五月综合久久 | 中文字幕成人网 | 欧美日韩精品影院 | 久热av在线| 国产成人黄色网址 | 国产黄在线播放 | 国产精品久久网 | 亚洲国产视频a | 亚洲更新最快 | 永久av免费在线观看 | 亚洲乱码久久 | 国产在线视频一区二区 | 久久久免费高清视频 | 一区二区三区免费在线观看视频 | 国产丝袜 | 亚洲最新av网址 | 欧美美女视频在线观看 | 人人超碰人人 | 天天干 天天摸 天天操 | 久久艹欧美 | 91大神免费在线观看 | 亚洲乱码中文字幕综合 | 亚洲乱码国产乱码精品天美传媒 | 亚洲欧美视频在线观看 | 精品99在线视频 | 天天爱天天干天天爽 | 国产中文字幕在线看 | 日本亚洲国产 | 亚洲欧美日韩国产一区二区三区 | 亚洲国产精品久久久久久 | 91精品办公室少妇高潮对白 | 97成人精品视频在线播放 | 麻豆传媒电影在线观看 | 在线免费观看视频一区 | 亚洲尺码电影av久久 | 在线免费av网站 | 国内视频 | 国产在线观看国语版免费 | 成年人在线免费看 | 国产在线黄 | 成av人电影 | 国产片免费在线观看视频 | 美女久久一区 | 91mv.cool在线观看 | av黄色av| 91av在| 久久久亚洲国产精品麻豆综合天堂 | 亚洲伦理一区 | 婷婷激情在线 | 国产精品3| 久久激五月天综合精品 | 一区二区免费不卡在线 | 精品国产激情 | 中文字幕观看av | 久久久精品久久 | 精品一区免费 | 日韩毛片在线免费观看 | 亚洲成年人av | 午夜久久网站 | 欧美一区二区日韩一区二区 | 99国产视频| 国产成人亚洲在线观看 | 嫩草伊人久久精品少妇av | 91精品国产高清自在线观看 | 久草在线国产 | 久久久免费观看完整版 | 国产精品刺激对白麻豆99 | 美女福利视频在线 | 在线观看911视频 | 日韩精品在线观看av | 国产日韩高清在线 | a视频免费| 超碰人人av| 久草影视在线观看 | 91亚洲欧美激情 | 国产精品原创视频 | 久久久www成人免费精品 | 人人看人人| 日韩一二区在线观看 | 国产精品久久久久免费 | 免费在线观看污网站 | 日躁夜躁狠狠躁2001 | 丁香五月亚洲综合在线 | 在线观看黄色大片 | 中文字幕在线视频国产 | 精品久久久成人 | 日本在线观看黄色 | 亚洲第一区在线播放 | 91在线视频在线 | 免费a v视频 | 久久免费精品一区二区三区 | 国产精品久久麻豆 | 免费av在线网站 | 人人干人人爽 | 日韩免费视频观看 | 国产网站在线免费观看 | 国产中文字幕大全 | 麻豆影视网站 | 免费观看视频的网站 | 亚洲男女精品 | 成年人在线免费看视频 | 新版资源中文在线观看 | 久久久精品视频网站 | 亚洲aaa毛片 | 狠狠激情中文字幕 | 久久99久久99精品中文字幕 | 欧美激情片在线观看 | 91九色蝌蚪视频网站 | 久久久久久国产一区二区三区 | 人人爽人人澡人人添人人人人 | 久草av在线播放 | 色视频网站在线观看一=区 a视频免费在线观看 | 免费亚洲电影 | 国产精品久久久久aaaa九色 | 成人av一区二区三区 | 亚洲精品综合在线 | 中文字幕一区在线 | 天堂在线一区二区 | 91精品一区二区三区蜜桃 | 亚洲精品动漫久久久久 | 日本久久免费视频 | 在线不卡中文字幕播放 | 日韩精品中文字幕一区二区 | 久久高清国产 | 最新中文字幕 | 福利av在线 | 久久字幕精品一区 | 国产精品久久久久久高潮 | 欧美日韩视频在线 | 天天干天天玩天天操 | 亚洲精品久久久久www | 性色在线视频 | 香蕉视频在线观看免费 | 99精品视频免费看 | 欧美另类性 | 麻豆精品视频在线 | 在线一二三区 | 日本午夜在线亚洲.国产 | 涩涩网站在线播放 | av电影免费观看 | 国产精品不卡在线观看 | 久久人人爽视频 | 91麻豆免费看 | 在线国产一区二区三区 | 国产91在 | 亚洲少妇激情 | 日韩性xxxx | 精品视频在线观看 | 一级黄色a视频 | 日本中文字幕观看 | 国内小视频| 嫩小bbbb摸bbb摸bbb | 国产在线无 | 亚洲黄色免费观看 | 成在线播放 | 亚洲国产精品激情在线观看 | 波多野结衣亚洲一区二区 | 91av在线视频免费观看 | 在线免费观看黄色 | 99久久这里只有精品 | 国内精品久久久精品电影院 | 成人精品福利 | 久久国产精品二国产精品中国洋人 | 91精品欧美一区二区三区 | 最近久乱中文字幕 | 欧美一区日韩精品 | 国产午夜精品一区二区三区欧美 | 中文字幕888 | 日韩理论在线观看 | 日日摸日日添日日躁av | 特级xxxxx欧美| 精品国产一区二区三区久久久蜜月 | 久久好看免费视频 | 欧美精品久久久久久久 | 一本一道久久a久久精品蜜桃 | 久久久久久毛片精品免费不卡 | 国产麻豆果冻传媒在线观看 | 正在播放一区 | 97国产情侣爱久久免费观看 | 国产高清在线不卡 | 日韩区欧美久久久无人区 | 天天躁日日躁狠狠躁av麻豆 | 在线观看视频97 | 综合天天色| 久久永久免费 | 黄色亚洲在线 | 九九免费在线观看 | 国产精品中文字幕在线观看 | 久色伊人 | 在线观看视频h | 就要干b| 色综合久久中文综合久久牛 | 免费日韩在线 | 在线精品播放 | 永久中文字幕 | 成人羞羞免费 | 久久精品国产久精国产 | 天天激情 | 久久福利在线 | 久99久在线| 99在线精品视频观看 | 国产精品国产三级在线专区 | 中文字幕在线观看视频免费 | www91在线 | 国产精品免费一区二区三区 | 蜜臀av性久久久久av蜜臀妖精 | 中文字幕电影网 | 精品国产人成亚洲区 | 一区二区成人国产精品 | 午夜精品久久久久久久久久 | 999久久久精品视频 日韩高清www | 天天干 夜夜操 | 国产在线国偷精品产拍免费yy | 九色福利视频 | 欧美日韩国产精品一区二区 | 91看片一区二区三区 | 天天爽人人爽夜夜爽 | 亚洲在线网址 | 欧美va电影 | 久热免费在线观看 | 免费国产亚洲视频 | 亚洲精品小视频在线观看 | 日韩av综合网站 | 日日爱网址 | 免费麻豆| 91成人免费在线视频 | 国产亚洲精品久久19p | 黄av免费| 久久刺激视频 | 成人黄色在线 | 午夜久久福利 | 片黄色毛片黄色毛片 | 最近日本中文字幕a | 国产不卡在线观看 | 欧美日韩国产网站 | 欧美成人区 | 天天草av| 精品国产理论 | 天堂av在线免费观看 | 国产69久久精品成人看 | 亚洲三级国产 | 99精品久久久久久久 | 精品一区二区在线免费观看 | 亚洲乱码中文字幕综合 | 久久久国产精品网站 | 国产在线视频一区二区 | 五月婷婷激情五月 | 国产日韩欧美在线 | 亚洲精品在线观看的 | 欧美一级特黄高清视频 | 最新久久免费视频 | 99精品视频播放 | 亚洲国产经典视频 | 免费三级黄色片 | av免费网站 | 四虎在线永久免费观看 | 在线日韩视频 | 国产精品久久麻豆 | 日韩精品中文字幕在线 | 日本精品视频在线播放 | 日韩欧美一区二区三区免费观看 | 国产成人精品一区二三区 | 精品影院 | 中文字幕在线视频一区二区 | 国产香蕉97碰碰久久人人 | 97高清视频| 69国产精品成人在线播放 | 久久久久久久久毛片 | www亚洲精品 | 日韩二三区| 国产视频久久久久 | 又黄又爽又色无遮挡免费 | 一区二区三高清 | 精品久久久久久亚洲综合网 | 天天拍天天操 | 一区二区伦理 | 亚洲精品午夜国产va久久成人 | 久久久久在线 | 免费观看性生活大片 | 久久亚洲综合国产精品99麻豆的功能介绍 | 在线免费视频 你懂得 | 天天激情在线 | 久久天堂精品视频 | 日韩中文三级 | 亚洲人成网站精品片在线观看 | 午夜婷婷在线播放 | 国产精品不卡 | 久久视频在线 | 美女在线观看av | 一级片视频在线 | 夜夜高潮夜夜爽国产伦精品 | 一区三区视频在线观看 | av在线免费不卡 | 色久网|