master
13285100733@qq.com 2 years ago
parent 4cffb5d51d
commit b007ffd943

@ -0,0 +1,51 @@
# weapp-wechat-zhihu
微信中的知乎--微信小程序 demo // Zhihu in Wechat
![](images/v_index.png)
### description
- 界面及交互设计来自知乎 Android 版本
- _工具_: [微信 web 开发者工具](https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1477579747265)
- _数据_: 没有开放 API, 所以使用伪造本地数据
#### 功能及使用的组件等
* 列表式渲染数据
* 自定义顶部 tabbar
* 下拉刷新
* 上拉加载更多
* 轮播图
<br/>等...
### Setup
```
git@github.com:RebeccaHanjw/weapp-wechat-zhihu.git
```
下载安装Wechat DEV Tools, 并导入项目
### 演示
首页下拉刷新等
![](images/index_scroll.gif)
底部 tab 切换
![](images/bottom_tab.gif)
顶部自定义 tab 切换
![](images/top_tab.gif)
页面跳转
![](images/navigation.gif)
##### Demo 用于学习交流, 转载请注明出处

@ -0,0 +1,35 @@
//app.js
App({
onLaunch: function () {
wx.cloud.init({
env:"cloud1-8g5wmepxce8a3b8a",
traceUser:true//是否访问权限可见
})}})
/*
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
},
getUserInfo:function(cb){
var that = this
if(this.globalData.userInfo){
typeof cb == "function" && cb(this.globalData.userInfo)
}else{
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData:{
userInfo:null
}
})*/

@ -0,0 +1,43 @@
{
"pages":[
"pages/login/login",
"pages/index/index",
"pages/submit/submit",
"pages/notify/notify",
"pages/answer/answer",
"pages/question/question"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#0068C4",
"navigationBarTitleText": "知乎",
"navigationBarTextStyle":"white",
"enablePullDownRefresh":true
},
"tabBar": {
"color": "#626567",
"selectedColor": "#2A8CE5",
"backgroundColor": "#FBFBFB",
"borderStyle": "white",
"list": [{
"pagePath": "pages/index/index",
"text": "",
"iconPath": "images/index.png",
"selectedIconPath": "images/index_focus.png"
},{
"pagePath": "pages/notify/notify",
"text": "",
"iconPath": "images/ring.png",
"selectedIconPath": "images/ring_focus.png"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true,
"style": "v2",
"sitemapLocation": "sitemap.json"
}

@ -0,0 +1,127 @@
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
/*padding: 200rpx 0;*/
box-sizing: border-box;
background: #F0F4F3;
}
.container.withtab{
margin: 105rpx 0 0 0;
/*top: 105rpx;*/
}
.flex-wrp{
display: flex;
}
.flex-tab{
flex-flow: row nowrap;
justify-content: space-around;
align-items: stretch;
}
.flex-item{
flex-grow: 1;
text-align: center;
}
.top-tab{
width: 750rpx;
height: 100rpx;
background: #298DE5;
color: #8CCEFD;
font-size: 28rpx;
line-height: 100rpx;
box-shadow: 0 2px 2px #bebebe;
margin: 0 0 8rpx 0;
position: fixed;
top: 0;
z-index: 9999;
}
.toptab.active{
color: #ffffff;
border-bottom: solid 2px #ffffff;
}
.container{
padding: 0;
font-size: 14rpx;
color: #000;
}
.container .feed-item{
width: 690rpx;
padding: 30rpx 30rpx 20rpx;
margin: 7rpx 0 6rpx 0;
background: #ffffff;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
box-shadow: 0 2px 5px #eeeeee;
}
.container .feed-item .feed-source{
width: 690rpx;
left: 0;
height: 50rpx;
}
.container .feed-item .feed-source .avatar{
position: relative;
display: inline-block;
}
.container .feed-item .feed-source a{
display: inline-block;
height: 40rpx;
}
.container .feed-item .feed-source .avatar image{
/*position: absolute;*/
display: inline-block;
width: 45rpx;
height: 45rpx;
border-radius: 45rpx;
top: 10rpx;
vertical-align: middle;
}
.container .feed-item .feed-source text{
/*position: absolute;*/
display: inline-block;
height: 40rpx;
line-height: 40rpx;
vertical-align: middle;
margin: 0 0 0 15rpx;
color: #a0acac;
font-size: 26rpx;
}
.container .feed-item .feed-source .item-more{
display: inline-block;
width: 40rpx;
height: 45rpx;
float: right;
}
.container .feed-item .feed-content{
padding: 10rpx 0 0 0;
}
.container .feed-item .feed-content .question text{
font-size: 28rpx;
font-weight: 600px;
line-height: 40rpx;
word-spacing: 5rpx;
}
.container .feed-item .feed-content .answer-body{
padding: 10rpx 0 0 0;
/*height: 10rpx;*/
font-size: 24rpx;
line-height: 28rpx;
color: #5b5b5b;
}
.container .feed-item .feed-content .answer-actions{
width: 690rpx;
padding: 10rpx 0 0;
color: #a0acac;
}
.container .feed-item .feed-content .answer-actions view{
display: inline-block;
vertical-align: text-bottom;
padding: 0 10rpx 0 0;
font-size: 24rpx;
}
.container .feed-item .feed-content .answer-actions .dot ::after{
content: "•";
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@ -0,0 +1,56 @@
//answer.js
var app = getApp()
Page({
data: {
motto: '知乎--微信小程序版',
userInfo: {},
feed: [],
},
//事件处理函数
toQuestion: function() {
wx.navigateTo({
url: '../question/question'
})
},
onLoad: function (options) {
var aid=options.aid
console.log(options);
console.log(options.aid);
console.log('onLoad')
var that = this
//调用应用实例的方法获取全局数据
/*app.getUserInfo(function(userInfo){
//更新数据
that.setData({
userInfo:userInfo
})
})*/
wx.cloud.database().collection('tiezi')
.where({
_id:aid
})
.get({
success(res) {
console.log("请求成功", res)
that.setData({
feed:res.data
}),
console.log(res.data)
},
fail(res) {
console.log("请求失败", res)
}
})
},
/*
onLoad: function (options) {
},*/
tapName: function(event){
console.log(event)
},
})

@ -0,0 +1,3 @@
{
"navigationBarTitleText": "回答"
}

@ -0,0 +1,94 @@
<!--answer.wxml-->
<block wx:for="{{feed}}" wx:key="index">
<view class="a" >
<view class="question" >
<text class="question-title">{{item.title}}</text>
</view>
<view class="answerer-wrp">
<view class="bg-half"></view>
<view class="answerer flex-wrp">
<view class="avatar flex-item">
<image src="{{item.feed_source_img}}"></image>
</view>
<view class="answerer-info flex-item">
<text class="answerer-name">{{item.feed_source_name}}</text>
<text class="answerer-des">快来关注我吧~</text>
</view>
<view class="follow flex-item">
<text>十 关注</text>
</view>
</view>
</view>
<view class="answer-content">
<text class="desc">{{item.content}}</text>
<!--<text>难道不明白纸质书更贵啊!!!
若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。
另外用kindle看小说的怎么真心不懂了。题主不看小说么难道题主拿来看教科书还是技术文档还是题主觉得小说就是小时代内样的对小时代没偏见尊重多样性
而且纸质书搬起来真心困难啊!当初毕业带不回来,忍痛卖了不少好桑心!
碎片时间阅读总不能天天背着一本书吧,那么占地方。
看到描述最后一段,感觉有骗答案的嫌疑
</text>
<image src="../../images/1444983318907-_DSC1826.jpg"></image>
<text>
难道不明白纸质书更贵啊!!!
若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。
另外用kindle看小说的怎么真心不懂了。题主不看小说么难道题主拿来看教科书还是技术文档还是题主觉得小说就是小时代内样的对小时代没偏见尊重多样性
而且纸质书搬起来真心困难啊!当初毕业带不回来,忍痛卖了不少好桑心!
碎片时间阅读总不能天天背着一本书吧,那么占地方。
看到描述最后一段,感觉有骗答案的嫌疑
</text>
<image src="../../images/1444983318907-_DSC1826.jpg"></image>-->
<image wx:for="{{item.url}}" src="{{item}}" ></image>
</view>
</view>
</block>
<!--
<view class="answer-footer flex-wrp">
<view class="good flex-item">
<view class="good-bad">
<image src="../../images/good-bad.png"></image>
</view>
<view class="good-num">2.1k</view>
</view>
<view class="operation-wrp flex-item">
<view class="operation flex-wrp flex-tab">
<view class="operation-btn flex-item">
<image src="../../images/flag.png"></image>
<text>没有帮助</text>
</view>
<view class="operation-btn flex-item">
<image src="../../images/heart2.png"></image>
<text>感谢</text>
</view>
<view class="operation-btn flex-item">
<image src="../../images/star2.png"></image>
<text>收藏</text>
</view>
<view class="operation-btn flex-item">
<image src="../../images/comment.png"></image>
<text>302</text>
</view>
</view>
</view>
</view>
</view>
-->

@ -0,0 +1,151 @@
/**answer.wxss**/
.a {
padding: 0;
font-size: 14rpx;
background: #F0F4F3;
color: #000;
}
.question {
position: relative;
width: 650rpx;
padding: 40rpx 50rpx 30rpx;
background: #298DE5;
color: #fff;
font-size: 38rpx;
line-height: 48rpx;
}
.answerer-wrp{
position: relative;
width: 750rpx;
height: 150rpx;
background: #fff;
}
.answerer-wrp .bg-half{
position: absolute;
top: 0;
width: 750rpx;
height: 75rpx;
background: #298DE5;
}
.answerer {
position: relative;
margin: 0 auto;
width: 630rpx;
height: 90rpx;
padding: 30rpx;
background: #fff;
border: solid 1px #ebebeb;
border-radius: 3px;
box-shadow: 0 1px 2px #bebebe;
}
.answerer .avatar {
flex: 1;
width: 90rpx;
height: 90rpx;
}
.answerer .avatar image {
display: inline-block;
width: 90rpx;
height: 90rpx;
border-radius: 90rpx;
}
.answerer .answerer-info{
flex: 5;
text-align: left;
padding: 10rpx 20rpx;
line-height: 38rpx;
}
.answerer .answerer-info text{
display: block;
}
.answerer .answerer-info .answerer-name{
font-size: 32rpx;
}
.answerer .answerer-info .answerer-des{
font-size: 22rpx;
color: #808080;
line-height: 28rpx;
}
.answerer .follow{
flex: 2;
padding: 15rpx 0;
font-size: 22rpx;
}
.answerer .follow text{
display: inline-block;
padding: 15rpx 20rpx;
color: #40bcd0;
border: solid 2px #40bcd0;
border-radius: 6rpx;
}
.answer-content{
padding: 30rpx 40rpx;
background: #ffffff;
}
.answer-content text{
font-size: 32rpx;
color: #454545;
line-height: 44rpx;
word-break: break-all;
}
.answer-content image{
width: 100%;
margin: 20rpx 0;
}
.answer-footer{
position: fixed;
bottom: 0;
height: 70rpx;
border-top: solid 1px #ebebeb;
background: #ffffff;
width: 670rpx;
padding: 20rpx 40rpx;
}
.answer-footer .good{
flex: 1;
/*display: inline-block;*/
height: 40rpx;
border: solid 1px #d1d1d1;
border-radius: 3px;
padding: 10rpx 8rpx;
margin: 10rpx 0;
}
.answer-footer .good .good-bad{
display: inline-block;
}
.answer-footer .good image{
display: inline-block;
width: 38rpx;
height: 38rpx;
vertical-align: middle;
}
.answer-footer .good .good-num{
display: inline-block;
padding: 10rpx 4rpx;
/*font-size: 24rpx;*/
}
.answer-footer .operation-wrp{
flex: 5;
}
.answer-footer .operation{
justify-content: space-between;
padding: 0 0 0 60rpx;
}
.answer-footer .operation-btn{
flex: 1;
text-align: center;
}
.answer-footer .operation image{
display: block;
margin: 0 auto;
width: 50rpx;
height: 50rpx;
}
.answer-footer .operation-btn text{
display: block;
font-size: 14rpx;
color: #bebebe;
}

@ -0,0 +1,169 @@
//index.js
var util = require('../../utils/util.js')
var app = getApp()
Page({
data: {
feed: [],
feed_length: 0,
//imgList:[]
},
//事件处理函数
bindItemTap: function(event) {
/*wx.navigateTo({
url: '../answer/answer'
})*/
var aid=event.currentTarget.dataset.aid;
console.log(aid)
//console.log("1")
wx.navigateTo({
url: '../answer/answer?aid='+aid,//要跳转到的页面路径
})
},
bindQueTap: function() {//跳转que 可不用此函数
},
onLoad: function () {
console.log('onLoad')
let that = this
//调用应用实例的方法获取全局数据
this.getData();
},
upper: function () {
wx.showNavigationBarLoading()
this.refresh();
console.log("upper");
setTimeout(function(){wx.hideNavigationBarLoading();wx.stopPullDownRefresh();}, 2000);
},
lower: function (e) {
wx.showNavigationBarLoading();
var that = this;
setTimeout(function(){wx.hideNavigationBarLoading();that.nextLoad();}, 1000);
console.log("lower")
},
scroll: function (e) {
console.log("scroll")
},
//网络请求数据, 实现首页刷新
refresh0: function(){
this.getData;
/*var index_api = '';
util.getData(index_api)
.then(function(data){
//this.setData({
//
//});
console.log(data);
});*/
},
//使用本地 fake 数据实现刷新效果
getData: function(){
let that=this
wx.cloud.database().collection('tiezi')
.orderBy('createTime', 'desc') //按发布视频排序
.get({
success(res) {
console.log("请求成功", res)
that.setData({
feed:res.data
}),
console.log(res.data)
},
fail(res) {
console.log("请求失败", res)
}
})
/*
var feed = util.getData2();
console.log("loaddata");
var feed_data = feed.data;
this.setData({
feed:feed_data,
feed_length: feed_data.length
});
console.log(feed_data);*/
},
refresh: function(){
wx.showToast({
title: '刷新中',
icon: 'loading',
duration: 3000
});
this.getData()
/*
let that=this
wx.cloud.database().collection('tiezi')
.orderBy('createTime', 'desc') //按发布视频排序
.get({
success(res) {
console.log("请求成功", res)
that.setData({
feed:res.data,
feed_length: res.data.length
}),
console.log(res.data)
},
fail(res) {
console.log("请求失败", res)
}
})
*/
/*
var feed = util.getData2();
console.log("loaddata");
var feed_data = feed.data;
this.setData({
feed:feed_data,
feed_length: feed_data.length
});
setTimeout(function(){
wx.showToast({
title: '刷新成功',
icon: 'success',
duration: 2000
})
},3000)*/
},
//使用本地 fake 数据实现继续加载效果
nextLoad: function(){
wx.showToast({
title: '加载中',
icon: 'loading',
duration: 4000
})
var next = util.getNext();
console.log("continueload");
var next_data = next.data;
this.setData({
feed: this.data.feed.concat(next_data),
feed_length: this.data.feed_length + next_data.length
});
setTimeout(function(){
wx.showToast({
title: '加载成功',
icon: 'success',
duration: 2000
})
},3000)
},
goto(){
wx.navigateTo({
url: '../submit/submit',//要跳转到的页面路径
})
},
})

@ -0,0 +1,52 @@
<!--index.wxml-->
<scroll-view scroll-y="true" class="container" bindscrolltoupper="upper" upper-threshold="10" lower-threshold="5" bindscrolltolower="lower" scroll-into-view="{{toView}}" scroll-top="{{scrollTop}}">
<view class="search flex-wrp">
<view class="search-left flex-item">
<image src="../../images/search.png"></image>
<input placeholder="搜索话题, 问题或人" placeholder-class="search-placeholder"/>
</view>
<view class="search-right flex-item" bindtap="goto">
<image src="../../images/lighting.png"></image>
</view>
</view>
<block wx:for="{{feed}}" wx:for-index="idx" wx:for-item="item" data-idx="{{idx}}">
<view class="feed-item">
<view class="feed-source">
<a class="">
<view class="avatar">
<image src="{{item.feed_source_img}}"></image>
<!--<open-data type="userAvatarUrl"></open-data>-->
</view>
<text>{{item.feed_source_name}}</text>
<!-- <open-data type="userNickName"></open-data>-->
</a>
<image class="item-more" mode="aspectFit" src="../../images/more.png"></image>
</view>
<view class="feed-content">
<view class="question" qid="{{question_id}}" bindtap="bindQueTap">
<a class="question-link">
<text>{{item.title}}</text>
</a>
</view>
<view class="answer-body">
<view >
<text class="answer-txt" bindtap="bindItemTap" data-aid="{{item._id}}">{{item.content}}</text>
</view>
<view class="answer-actions" bindtap="bindItemTap">
<view class="like dot">
<a>{{item.good_num}} 赞同 </a>
</view>
<view class="comments dot">
<a>{{item.comment_num}} 评论 </a>
</view>
<view class="follow-it">
<a>关注问题</a>
</view>
</view>
</view>
</view>
</view>
</block>
</scroll-view>

@ -0,0 +1,57 @@
/**index.wxss**/
.container{
height: 1500rpx;
}
.container .search{
width: 735rpx;
height: 65rpx;
padding: 12.5rpx 0 12.5rpx 15rpx;
background: #2A8CE5;
}
.container .search-left{
flex: 8;
background: #4EA3E7;
text-align: left;
}
.container .search-left input{
display: inline-block;
height: 65rpx;
font-size: 26rpx;
}
.search-placeholder{
color: #8CCEFD;
line-height: 20rpx;
}
.container .search .search-left image{
display: inline-block;
width: 35rpx;
height: 35rpx;
padding: 15rpx 15rpx 15rpx 20rpx;
}
.container .search .search-right{
flex: 1;
}
.container .search .search-right image{
width: 45rpx;
height: 45rpx;
padding: 10rpx;
}
.container{
padding: 0;
font-size: 14rpx;
background: #F0F4F3;
color: #000;
}
/*feed-item part is in app.wxss for multiplexing*/
.answer-txt{
width:700rpx;
height:49rpx;
font-size:25rpx;
overflow:hidden;
text-overflow: ellipsis;
display:-webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}

@ -0,0 +1,53 @@
// pages/login/login.js
Page({
data:{
userInfo:'',
avatarUrl:'',
nickName:''
},
onLoad(){
/*
let user=wx.getStorageSync('user')
this.setData({
userInfo:user
})
wx.switchTab({
url: '/pages/index/index'
})
*/
},
login(){
console.log('点击事件执行了')
wx.getUserProfile({
desc: '必须授权才能使用',
success:res=>{
let user=res.userInfo
let avatarUrl=res.userInfo.avatarUrl
let nickName=res.userInfo.nickName
wx.setStorageSync('user', user)
wx.setStorageSync('avatarUrl', avatarUrl)
wx.setStorageSync('nickName', nickName)
console.log('成功',res)
wx.cloud.database().collection('user').add({
data: {
userInfo:user,
avatarUrl:user.avatarUrl,
nickName:user.nickName
}
})
},
fall:res=>{
console.log('失败',res)
}
})
wx.switchTab({
url: '/pages/index/index'
})
},
nologin(){
this.setData({
userInfo:''
})
wx.setStorageSync('user', null)
},
})

@ -0,0 +1,3 @@
{
"usingComponents": {}
}

@ -0,0 +1,13 @@
<!--pages/login/login.wxml-->
<!--登录-->
<button wx:if="{{!userInfo}}" bindtap="login">登录</button>
<view wx:else class="root">
<image class="touxiang" src="{{userInfo.avatarUrl}}"></image>
<text class="nicheng">{{userInfo.nickName}}</text>
</view>
<!--退出登录-->
<view wx:if="{{userInfo}}">
<button bindtap="nologin" >
<text>退出登录</text>
</button>
</view>

@ -0,0 +1,12 @@
/* pages/login/login.wxss */
.touxiang {
width: 150rpx;
height: 150rpx;
border-radius: 50%;
margin-top: 20rpx;
margin-bottom: 10rpx;
margin-left: 40%;
}
.nicheng{
color:white;
}

@ -0,0 +1,16 @@
//logs.js
var util = require('../../utils/util.js')
Page({
data: {
navTab: ["通知", "赞与感谢", "关注"],
currentNavtab: "0"
},
onLoad: function () {
},
switchTab: function(e){
this.setData({
currentNavtab: e.currentTarget.dataset.idx
});
}
})

@ -0,0 +1,3 @@
{
"navigationBarTitleText": ""
}

@ -0,0 +1,83 @@
<!--logs.wxml-->
<view class="top-tab flex-wrp flex-tab">
<view class="toptab flex-item {{currentNavtab==idx ? 'active' : ''}}" wx:for="{{navTab}}" wx:for-index="idx" wx:for-item="itemName" data-idx="{{idx}}" bindtap="switchTab">
{{itemName}}
</view>
</view>
<scroll-view scroll-y="true" class="container notify withtab" bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-into-view="{{toView}}" scroll-top="{{scrollTop}}">
<view class="ctnt0" hidden="{{currentNavtab==0 ? '' : true}}">
<view class="unread">
<text>0 条未读</text>
<image src="../../images/allread.png"></image>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
<view class="notify-item flex-wrp">
<view class="avatar flex-item">
<image src="../../images/icon1.jpeg"></image>
</view>
<view class="notify-content flex-item">
<text class="notify-source">Rebecca 回答了问题</text>
<text class="notify-title">C#如何在不覆盖原有文件的情况下直接修改某一部分的内容?</text>
</view>
</view>
</view>
<view class="ctnt1 placehold" hidden="{{currentNavtab==1 ? '' : true}}">
<text>赞与感谢</text>
</view>
<view class="ctnt2 placehold" hidden="{{currentNavtab==2 ? '' : true}}">
<text>关注</text>
</view>
</scroll-view>

@ -0,0 +1,54 @@
.unread{
color: #9A9C9B;
height: 60rpx;
padding: 10rpx 40rpx;
text-align: left;
width: 670rpx;
}
.unread text{
display: inline-block;
line-height: 60rpx;
font-size: 22rpx;
}
.unread image{
display: inline-block;
width: 50rpx;
height: 50rpx;
vertical-align: middle;
float: right;
}
.notify-item{
width: 680rpx;
background: #ffffff;
padding: 25rpx 70rpx 25rpx 0;
border-bottom: solid 1px #ebebeb;
}
.notify-item image{
width: 80rpx;
height: 80rpx;
border-radius: 80rpx;
}
.notify-item .avatar{
flex: 1;
}
.notify-item .notify-content{
flex: 4;
text-align: left;
}
.notify-item .notify-content text{
display: block;
}
.notify-item .notify-content .notify-source{
color: #818A8F;
font-size: 28rpx;
padding: 0 0 8rpx 0;
}
.notify-item .notify-content .notify-title{
color: #AFAFAF;
font-size: 30rpx;
line-height: 34rpx;
}
.placehold{
padding: 80rpx 0;
font-size: 28rpx
}

@ -0,0 +1,30 @@
//answer.js
var util = require('../../utils/util.js')
var app = getApp()
Page({
data: {
motto: '知乎--微信小程序版',
userInfo: {}
},
//事件处理函数
bindItemTap: function() {
wx.navigateTo({
url: '../answer/answer'
})
},
onLoad: function () {
console.log('onLoad')
var that = this
//调用应用实例的方法获取全局数据
app.getUserInfo(function(userInfo){
//更新数据
that.setData({
userInfo:userInfo
})
})
},
tapName: function(event){
console.log(event)
}
})

@ -0,0 +1,3 @@
{
"navigationBarTitleText": "问题"
}

@ -0,0 +1,225 @@
<!--question.wxml-->
<view class="container">
<view class="question-wrp">
<view class="question-item">
<view class="que-tag">
<text class="tag">阅读</text>
<text class="tag">电子书</text>
<text class="tag">Kindle</text>
<text class="tag">书籍</text>
<text class="tag">文学</text>
</view>
<view class="que-title">
选择 Kindle 而不是纸质书的原因是什么?
</view>
<view class="que-content">
WEB前端*不靠谱天气预报员*想做代码小仙女
</view>
<view class="que-follow">
<view class="left">
<view class="watch">
<image src="../../images/eye.png"></image>
<text>3316</text>
</view>
<view class="comment">
<image src="../../images/comment2.png"></image>
<text>27</text>
</view>
</view>
<view class="right">
关注
</view>
</view>
</view>
<view class="que-operate flex-wrp">
<view class="invite flex-item">
<image src="../../images/invite.png"></image>
<text>邀请回答</text>
</view>
<view class="write flex-item">
<image src="../../images/write.png"></image>
<text>写回答</text>
</view>
</view>
</view>
<view class="answer-feed">
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
<view bindtap="bindItemTap" class="feed-item">
<view class="feed-source">
<a class="" bindTap="">
<view class="avatar">
<image src="../../images/icon1.jpeg"></image>
</view>
<text>Rebecca</text>
</a>
</view>
<view class="feed-content">
<view class="answer-body">
<view>
<text class="answer-txt">难道不明白纸质书更贵啊!!! 若觉得kindle更贵我觉得要么阅读量太少那确实没有买kindle的必要。要么买的都是盗版的纸质书我不清楚不加以评论。。。 另外用kindle看小说的... </text>
</view>
<view class="answer-actions">
<view class="like dot">
<a>3.9K 赞同 </a>
</view>
<view class="comments dot">
<a>254 评论 </a>
</view>
<view class="time">
<a>2 个月前</a>
</view>
</view>
</view>
</view>
</view>
</view>
</view>

@ -0,0 +1,180 @@
/**answer.wxss**/
.answer-feed {
padding: 0;
font-size: 14rpx;
background: #F0F4F3;
color: #000;
}
.question-wrp{
border-radius: 3px;
box-shadow: 0 1px 2px #bebebe;
}
.question-item{
width: 710rpx;
padding: 40rpx 20rpx 10rpx;
background: #fff;
}
.question-item .que-tag{
}
.question-item .que-tag .tag{
height: 28rpx;
padding: 15rpx 20rpx;
border-radius: 28rpx;
margin: 0 10rpx;
background: #EEF5F8;
color: #2186E0;
font-size: 28rpx;
vertical-align: middle;
}
.question-item .que-title{
padding: 40rpx 20rpx 30rpx;
font-size: 38rpx;
}
.question-item .que-content{
padding: 0 20rpx;
font-size: 26rpx;
}
.question-item .que-follow{
margin: 20rpx;
height: 68rpx;
}
.question-item .que-follow view{
display: inline-block;
margin: 0 40rpx 0 0;
}
.question-item .que-follow image{
width: 50rpx;
height: 50rpx;
margin: 0 10rpx 0 0;
vertical-align: middle;
}
.question-item .que-follow .left{
float: left;
padding: 10rpx 0;
}
.question-item .que-follow .left text{
color: #AFAFAF;
height: 50rpx;
vertical-align: middle;
padding: 18rpx 0;
font-size: 24rpx;
}
.question-item .que-follow .right{
float: right;
padding: 20rpx 55rpx;
color: #ffffff;
background: #52C980;
border-radius: 3px;
font-size: 26rpx;
margin: 0;
}
.que-operate{
width: 750rpx;
border-top: solid 1px #ebebeb;
border-bottom: solid 1px #ebebeb;
color: #889091;
vertical-align: middle;
background: #ffffff;
}
.que-operate .flex-item{
padding: 20rpx 0;
font-size: 26rpx;
}
.que-operate .invite{
border-right: solid 2px #ebebeb;
}
.que-operate image{
width: 50rpx;
height: 50rpx;
vertical-align: middle;
margin: 0 20rpx 0 0;
}
/*.answer-feed .feed-item{*/
/*width: 690rpx;*/
/*padding: 30rpx 30rpx 20rpx;*/
/*margin: 7rpx 0 6rpx 0;*/
/*background: #ffffff;*/
/*border-top: 1px solid #eee;*/
/*border-bottom: 1px solid #eee;*/
/*box-shadow: 0 2px 5px #eeeeee;*/
/*}*/
/*.answer-feed .feed-item .feed-source{*/
/*width: 690rpx;*/
/*left: 0;*/
/*height: 50rpx;*/
/*}*/
/*.answer-feed .feed-item .feed-source .avatar{*/
/*position: relative;*/
/*display: inline-block;*/
/*}*/
/*.answer-feed .feed-item .feed-source a{*/
/*display: inline-block;*/
/*height: 40rpx;*/
/*}*/
/*.answer-feed .feed-item .feed-source .avatar image{*/
/*/!*position: absolute;*!/*/
/*display: inline-block;*/
/*width: 45rpx;*/
/*height: 45rpx;*/
/*border-radius: 45rpx;*/
/*top: 10rpx;*/
/*vertical-align: middle;*/
/*}*/
/*.answer-feed .feed-item .feed-source text{*/
/*/!*position: absolute;*!/*/
/*display: inline-block;*/
/*height: 40rpx;*/
/*line-height: 40rpx;*/
/*vertical-align: middle;*/
/*margin: 0 0 0 15rpx;*/
/*color: #a0acac;*/
/*font-size: 16rpx;*/
/*}*/
/*.answer-feed .feed-item .feed-source .item-more{*/
/*display: inline-block;*/
/*width: 40rpx;*/
/*height: 45rpx;*/
/*float: right;*/
/*}*/
/*.answer-feed .feed-item .feed-content{*/
/*padding: 10rpx 0 0 0;*/
/*}*/
/*.answer-feed .feed-item .feed-content .question text{*/
/*font-size: 28rpx;*/
/*font-weight: 600px;*/
/*line-height: 40rpx;*/
/*text-space: 5rpx;*/
/*}*/
.answer-feed .feed-item .feed-content .answer-body{
padding: 0;
/*height: 10rpx;*/
font-size: 24rpx;
line-height: 28rpx;
color: #5b5b5b;
}
/*.answer-feed .feed-item .feed-content .answer-actions{*/
/*width: 690rpx;*/
/*padding: 10rpx 0 0;*/
/*color: #a0acac;*/
/*}*/
/*.answer-feed .feed-item .feed-content .answer-actions view{*/
/*display: inline-block;*/
/*vertical-align: text-bottom;*/
/*padding: 0 10rpx 0 0;*/
/*font-size: 24rpx;*/
/*}*/
/*.answer-feed .feed-item .feed-content .answer-actions .dot ::after{*/
/*content: "•";*/
/*}*/

@ -0,0 +1,392 @@
Page({
/**
* 页面的初始数据
*/
//分类1
data: {
title: '',
content: '',
question_id:'',
feed_source_img:'',
feed_source_name:'',
tempFilePaths: [],
nowCount:0,//当前的图片上传个数
index:0,
nickName:"",
avatarUrl:"",
feed:[]
},
bindPickerChange:function(e){
console.log(e)
this.setData({
index:e.detail.value
})
},
//图片的上传
chooseImage:function(e){
let that = this;
wx.chooseImage({
count: 3, // 默认最多3张图片可自行更改
sizeType: ['original', 'compressed'],// 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: res => {
wx.showToast({
title: '正在上传...',
icon: 'loading',
mask: true,
duration: 1000
})
// 返回选定照片的本地文件路径列表tempFilePath可以作为img标签的src属性显示图片
let tempFilePath = res.tempFilePaths;
console.log(tempFilePath);
let nowCount = that.data.nowCount;
let tempFilePaths = that.data.tempFilePaths;
if(that.data.nowCount + tempFilePath.length >=3){
let i = 0;
while(nowCount<3){//还可以继续上传图片
tempFilePaths.push(tempFilePath[i]);
i++;
nowCount++;
}
that.setData({
nowCount:3,
tempFilePaths:tempFilePaths
})
}else{
let i = 0;
while(i<tempFilePath.length){
tempFilePaths.push(tempFilePath[i]);
i++;
}
that.setData({
nowCount:that.data.nowCount + tempFilePath.length,
tempFilePaths:tempFilePaths
})
}
console.log(that.data.nowCount,that.data.tempFilePaths);
}
})
},
//长按删除图片
DeleteImg: function (e) {
let that = this;
let tempFilePaths = that.data.tempFilePaths;
let index = e.currentTarget.dataset.index;//获取当前长按图片下标
wx.showModal({
title: '提示',
content: '确定要删除此图片吗?',
success: function (res) {
if (res.confirm) {
//console.log('点击确定了');
let nowCount = that.data.nowCount;
that.setData({
nowCount:nowCount-1
})
tempFilePaths.splice(index, 1);
} else if (res.cancel) {
//console.log('点击取消了');
return false;
}
that.setData({
tempFilePaths:tempFilePaths
});
}
})
},
//上传文件到云端
submit:function(e){
let i;
let count=0;
let that = this;
let url = [];
console.log(e);
let title = e.detail.value.name;
let content = e.detail.value.content;
if(title.length<3){
wx.showToast({
title: '标题少于3个字',
icon:"none"
})
return false
}
if(content.length<5){
wx.showToast({
title: '内容少于5个字',
icon:"none"
})
return false
}
wx.showLoading({
title: '发布中',
})
if(that.data.nowCount==0){
/*wx.cloud.callFunction({
name:'love_upload',
data:{
title:title,
content:content,
openid:that.data.openid,
url:[],
},success:function(e){
console.log(e);
wx.hideLoading({
success: (res) => {
that.setData({
value1:'',
value2:'',
tempFilePaths:[],
nowCount:0
})
wx.showToast({
title: '发布成功',
})
},
})
},fail:function(e){
wx.hideLoading({
success: (res) => {
wx.showToast({
title: '网络异常',
})
that.setData({
value1:'',
value2:'',
tempFilePaths:[],
nowCount:0
})
},
})
console.log(e);
}
})*/
let a=wx.getStorageSync ("nickName")
let b=wx.getStorageSync ("avatarUrl")
wx.cloud.database().collection('tiezi').add({
data: {
title:title,
content:content,
openid:that.data.openid,
url:url,
createTime: wx.cloud.database().serverDate(),
feed_source_img:b,
feed_source_name:a,
question_id:feed.length
}
})
wx.hideLoading({
success: (res) => {
that.setData({
})
wx.showToast({
title: '发布成功',
})}})
}else{
//将所有的内容上传到云端去
for(i=0;i<that.data.nowCount;i++){
console.log(1);
let extName = that.data.tempFilePaths[i].split(".").pop();
let cloudPath = "love/" + new Date().getTime() + "." + extName;
wx.cloud.uploadFile({
cloudPath: cloudPath,
filePath: that.data.tempFilePaths[i], // 文件路径
success: res => {
count++;
url.push(res.fileID);
console.log('上传图片');
console.log(i,url);
if(count==that.data.nowCount){
console.log(url);
/*
wx.cloud.callFunction({
name:'love_upload',
data:{
title:title,
content:content,
openid:that.data.openid,
url:url,
type:parseInt(that.data.index)+1
},success:function(e){
console.log(e);
wx.hideLoading({
success: (res) => {
that.setData({
value1:'',
value2:'',
tempFilePaths:[],
nowCount:0
})
wx.showToast({
title: '发布成功',
})
},
})
},fail:function(e){
wx.hideLoading({
success: (res) => {
wx.showToast({
title: '网络异常',
})
that.setData({
value1:'',
value2:'',
tempFilePaths:[],
nowCount:0
})
},
})
console.log(e);
}
})*/
let a=wx.getStorageSync ("nickName")
let b=wx.getStorageSync ("avatarUrl")
wx.cloud.database().collection('tiezi').add({
data: {
title:title,
content:content,
openid:that.data.openid,
url:url,
createTime: wx.cloud.database().serverDate(),
feed_source_img:b,
feed_source_name:a
}
})
wx.hideLoading({
success: (res) => {
that.setData({
value1:'',
value2:'',
tempFilePaths:[],
nowCount:0
})
wx.showToast({
title: '发布成功',
})}})
}
},fail:res=>{
console.log(res);
}
})
}
}
},
blur:function(e){
console.log(e);
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let loveSort = wx.getStorageSync('loveSort')
console.log(loveSort)
this.setData({
loveSort:loveSort
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
},
onAdd_s: function () {
wx.cloud.init({
env: 'cloud1-8g5wmepxce8a3b8a'
});
const db = wx.cloud.database()
db.collection('tiezi').add({
data: {
title:title,
content:content,
openid:that.data.openid,
url:[],
},
success: res => {
// 在返回结果中会包含新创建的记录的 _id
this.setData({
counterId: res._id,
count: 1
})
wx.showToast({
title: '成功扔进树洞~',
})
console.log('[数据库] [留言] 成功,记录 _id: ', res._id)
},
fail: err => {
wx.showToast({
icon: 'none',
title: '种种原因树洞拒绝了~'
})
console.error('[数据库] [新增记录] 失败:', err)
}
})
}
})

@ -0,0 +1,3 @@
{
"navigationBarTitleText": "我要发帖"
}

@ -0,0 +1,31 @@
<!--上传图片演示-->
<form bindsubmit="submit">
<!--帖子的标题-->
<view class="title">
<view class="title_right"><input value="{{value1}}" type="text" name='name' maxlength='100' placeholder='输入标题'/></view>
</view>
<!--帖子的内容-->
<textarea bindblur="blur" value="{{value2}}" auto-height maxlength="500" name='content' placeholder='输入内容'>
</textarea>
<!--帖子的图片-->
<view class="img_box">
<view class="imgs" wx:for="{{tempFilePaths}}" wx:key="index">
<image src='{{item}}' bindlongpress="DeleteImg" bindtap="listenerButtonPreviewImage" data-index="{{index}}" mode='widthFix' />
</view>
<view class="imgs" wx:if="{{nowCount<3}}">
<view class="images" bindtap="chooseImage">
<image src='../../images/upload.png' mode='widthFix' />
</view>
</view>
</view>
<!--提交按钮-->
<button class="tijiao" type="primary" formType="submit">提交</button>
</form>

@ -0,0 +1,73 @@
/* pages/submit/submit.wxss */
form{
display: block;
width: 100%;
padding: 20rpx 17rpx;
}
.title{
font-size: 38rpx;
display: flex;
margin-top: 25rpx;
padding: 13px 0;
margin-bottom: 30rpx;
border-bottom: 1px solid #ccc;
}
textarea{
margin-bottom: 30rpx;
border-bottom: 1px solid #ccc;
padding-right: 50rpx;
margin-top: 30rpx;
display: block;
width: 100%;
height: 550rpx !important;
box-sizing: border-box;
}
.picker{
display: flex;
padding: 13px 0;
margin-bottom: 35rpx;
border-bottom: 1px solid #ccc;
}
.img_box{
position:relative;
display: flex;
flex-wrap: wrap;
margin:0 auto;
}
.imgs{
width:33.33333333%;
display: flex;
justify-content: center;
margin-bottom:20rpx;
}
.imgs image{
width:90%;
max-height:212rpx;
border:1px solid rgba(214, 212, 212, 0.1);
/* box-shadow: 5rpx 5rpx 1rpx 3rpx #e2e0e0; */
}
.imgs .images{
position:relative;
}
.images button{
width:100%;
height:100%;
position:absolute;
top:0;
left:0;
}
.img_box .images{
width:90%;
height: 212rpx;
border:1px solid #E8E8E8;
border-radius:4rpx;
display: flex;
align-items: center;
justify-content: center;
}
.img_box .images>image{
width:60rpx;
height:60rpx;
}

@ -0,0 +1,30 @@
{
"compileType": "miniprogram",
"setting": {
"coverView": true,
"es6": true,
"postcss": true,
"minified": true,
"enhance": true,
"showShadowRootInWxmlPanel": true,
"packNpmRelationList": [],
"ignoreDevUnusedFiles": false,
"ignoreUploadUnusedFiles": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
}
},
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
},
"libVersion": "2.27.0",
"packOptions": {
"ignore": [],
"include": []
},
"appid": "wxcc745ea897810e52"
}

@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "lt2",
"setting": {
"compileHotReLoad": true
}
}

@ -0,0 +1,67 @@
function formatTime(date) {
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate()
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
function formatNumber(n) {
n = n.toString()
return n[1] ? n : '0' + n
}
module.exports = {
formatTime: formatTime
};
/*
var index = require('../data/data_index.js')
var index_next = require('../data/data_index_next.js')
function getData(url){
return new Promise(function(resolve, reject){
wx.request({
url: url,
data: {},
header: {
//'Content-Type': 'application/json'
},
success: function(res) {
console.log("success")
resolve(res)
},
fail: function (res) {
reject(res)
console.log("failed")
}
})
})
}
function getData2(){
return index.index;
}
function getNext(){
return index_next.next;
}
module.exports.getData = getData;
module.exports.getData2 = getData2;
module.exports.getNext = getNext;
module.exports.getDiscovery = getDiscovery;
module.exports.discoveryNext = discoveryNext;
*/
Loading…
Cancel
Save