- 提交表单时,contact为对象openid–贡献者对应微信昵称
- 条目页面:显示贡献者微信昵称,头像(如果用户换头像,原头像url会过期失效–如果贡献了条目,则存储用户头像?)
TODO
-
TODO
如需使用date字段,需初始化之前未设置date字段的数据库 -
feature
:主页随机一店,选择查看山正列表 - 提交汉服时的check改为精确匹配
-
fix
:小程序启动时获取info信息,而不是到了每个页面再加载 -
feature
:对于冲突汉服店铺信息的公示与投票 -
improve
:获取更多的汉服山正店铺信息 -
improve
汉服图片链接可以放到images目录下 -
fix
微信更新接口后更新原获取用户信息代码 - 添加功能导致的主页UI重构
当前主页塞不下其他功能入口了
- 加入以图搜图入口
可采用淘宝以图搜图接口
V0.3.0
bug修复
提交时的查询是模糊匹配还是全匹配?:
暂定为模糊匹配
TODO
如需使用date字段,需初始化之前未设置date字段的数据库Fix
输入框为空时查询卡死Fix
修复了添加新用户时忘记添加nums字段的bugimprove
新增汉服和冲突,用户增加了date字段Fix
某次查询结果未收录后,以后查询都会显示一个未收录–如果收录,重新置值为true
Fix
未收录时,显示的店铺名随输入框变动–显示时使用新设定的值而非输入值
Fix
提交页面点击用户多次按钮造成的数据重复提交–更改clickable为false
进行中
小程序端后台管理系统
feature
:汉服店铺贡献者列表,按照贡献店铺数目排序(预备v0.3.0推出
)feature
admin
timportant
待鉴定汉服页面UI
Fix
排名信息页的加载弹窗删除函数:疑虑:remove没有日志,不知道删除了什么–
TODO:先查存入再删
修改函数
根据id查询函数
分页云函数:限定山正,分页跳转:
- 分页跳转
- 选择查看山正列表
-
feature
:主页随机一店
list页面处设置一个加载中弹窗,区分删除确认弹窗
UI
Fix
优化显示列表,当前过于密集
UI
Fix
获取列表改为都是山店or正店,可以拿到主页展示
admin
user
promove
冲突汉服信息的更正
feature
admin
用户提交了已经有的数据
useractions
所有文本尽量上云
带来加载缓慢问题–更改为小程序启动时全部获取放到缓存Storage中
- 待鉴定店铺小程序端查看
去除未鉴定提交为表单,改为直接客服按钮发送店铺
提交汉服时的check改为精确匹配
未知汉服时主动沟通方法
如上
待实现
fix
:小程序启动时获取info信息,而不是到了每个页面再加载feature
:对于冲突汉服店铺信息的公示与投票improve
:获取更多的汉服山正店铺信息learning
:学习并利用云开发CMS便捷管理云端数据feature
:对具体店铺的评论—(预备v0.3.0推出
)评论区,论坛类需要企业资质
未收录体验优化
待选解决方案
- 如果未查到,自动收录到未查询数据库–定时统一搜集
- 弹出订阅模板消息申请–如果未查到获取订阅通知–收录后通知
- 未查询到–向客户发送消息–在提交页面新增–客服会话
feature
timportant
- 汉服图片链接可以放到images目录下
- 主页tips换行符失效
- textarea不放在表单组件中时,无法移动光标,按向上方向键会丢失内容
- 使用text替代数组:未知问题:原来text使用换行符\n,不会换行,改为用数组遍历
实现换行
V0.2.0
fix
:未录入店铺显示为山店更正查询结果为模糊匹配所得列表–修正按钮位置
更正显示tips未从云端数据库获取:则不提交审核,仅修改数据库也可修正
展示提供店铺数目的人名单列表—待做
拟解决方案:更换true和false为
- 或者:新增字段,如果false且该字段为真,则显示为未录入
采用
代码问题&知识速记
数据库聚合查询
project
的形式如下:
project({
<表达式>
})
聚合阶段。把指定的字段传递给下一个流水线,指定的字段可以是某个已经存在的字段,也可以是计算出来的新字段。
addFields
等同于同时指定了所有已有字段和新增字段的 project
阶段
const _ = db.command
await db.collection('user').where({
openid:wxContext.OPENID
})
.update({
data: {
// 更新字段++
nums:_.inc(1)
},
})
其他
在微信开发中我们经常会用到标签中属性的属性值,有时候我们通过 data-* 和 e.target.dateset 来获取属性值
调用出来的数据是undefined
data后面的属性名写得不规范!在data后面的属性名是不能按照驼峰式的写法,只要把定义的属性名全部换成小写就没有问题了
但这种方式有时也会存在 e.target.dataset={},此时productid=undefined,就需要换一种解决办法。。。
2)console.log(e)查看
e对象中包含两个对象分别是currentTarget和target,而真正的数据包含在currentTarget。 打印出e,找到你的数据,通过对象调用的方式即可。
使用第一种的方法e.target.dataset.action 会获取当前点击的元素的action,则获取图片上的action,图片上没有action便取的是undefined; 使用第二种的方法e.currentTarget.dataset.action 会获取有事件的那个元素,即view,所以获得“father”
var date=new Date()
:js获取当前时间
onLoad: function (options) {
wx.showLoading({
title: '加载中',
})
var that = this
console.log('postid', options.postid)
const db = wx.cloud.database()
const _ = db.command
db.collection('post_collection').doc(options.postid).get({
success: function (res) {
console.log(res.data)
}
})
onItemClick: function (e) {
console.log(e.currentTarget.dataset.postid)
wx.navigateTo({
url: '../postdetail/postdetail?postid=' + e.currentTarget.dataset.postid,
})
}
表单的两种形式
之前使用:利用双向绑定
监听输入的值绑定到data里的数据
按钮监听事件为将这些数据一起处理并调用云函数提交
标准form:button设置submit属性
提交时一起提交
db.collection('test').doc('milk-1').set({
data: {
name: 'milk',
official: 'dairy',
beizhu: 'test',
}
})
//忘记添加await导致函数未生效
`await db.collection('test').doc(event.id).set({`
var that=this;//进入云函数中this发生了变化,使用this.setData({})无效
wx.cloud.callFunction({
// 云函数名称
name: 'get_store_byName',
//携带的参数:storeName--云函数中使用event.storeName获取
data:{
storeName:that.data.storeName
},
//成功后执行
success: function (res) {
//提取数据--返回的数据为res.result.云函数处定义的字段名.data
var data = res.result.storelist.data
//此处为了简略代码,删去了else情况的操作
if(data.length>0){
that.setData({
loadModal:false,
storelist: data
})}
},
fail: console.error
})
},
-
放在标签内和放在value的区别
-
doc返回的是一条值而不是一个列表
<textarea maxlength="-1" bindinput="beizhuInput" value="{{storelist.beizhu}}"></textarea>
- 使用set更新其他字段后,未更新的字段name消失
- onLoad里加载数据,从上一层回来时数据不会更新
- onshow也不更新
update 只能更新,set是有则替换,无则插入,覆盖操作
set()更新字段下的所有数据
await db.collection('hanfuStore').doc(event.id).set({
data: {
official: event.official,
beizhu: event.beizhu,
}
//事实上重写了data字段
})
1,表示:将style的color的值更新为blue
const _ = db.command
db.collection('todos').doc('todo-identifiant-aleatoire').update({
data: {
style: {
color: 'blue'
}
},
success: function(res) {
console.log(res.data)
}
})
2,表示:将style的值更新为对象{color:blue}
const _ = db.command
db.collection('todos').doc('todo-identifiant-aleatoire').update({
data: {
//style的值更新为对象{color:blue}
//重写了style字段,而不是data字段
style: _.set({
color: 'blue'
})
},
success: function(res) {
console.log(res.data)
}
})
//结果看起来一样,其实性能1更高些。
- 固定在页面左侧不随滑动改变的按钮
position: fixed;
z-index: 1;/*设置悬浮优先级为最高,否则会被覆盖而看不到*/
left: 0px;
bottom: 40%;
background-blend-mode: color-burn;
/* top: 60%; */
padding缩写:上右下左
小程序端与云函数端的表现会有如下差异:
- 小程序端:注意与集合权限设置有关,一个用户仅能统计其有读权限的记录数
- 云函数端:因属于管理端,因此可以统计集合的所有记录数
improve
查询–修改–页面同所有店铺页面分开–不具备翻页功能所有正店
所有山店
页面
showQrcode() {
wx.previewImage({
urls: ['https://6865-helloyun-4ge5h4wyc91f5778-1304890457.tcb.qcloud.la/myQrCode/money.jpg?sign=0148353eddb814548368e3db70dd26ee&t=1614000653'],
current: 'https://6865-helloyun-4ge5h4wyc91f5778-1304890457.tcb.qcloud.la/myQrCode/money.jpg?sign=0148353eddb814548368e3db70dd26ee&t=1614000653' // 当前显示图片的http链接
})
},
- 设置的弹窗为flase未生效
云函数success的内容更改,更新云函数后才生效
wx.cloud.callFunction({
// 云函数名称
name: 'get_store_list',
data:{
pages:pages
},
//携带的参数:storeName--云函数中使用event.storeName获取
//成功后执行
success: function (res) {
var data = res.result.storeList.data
that.setData({
//此处设置一个加载中弹窗,区分删除确认弹窗
loadModel2:false,
storelist: data
})
},
fail: console.error
})
- [ ] 更新日志每次更新才会有,不需要云端更新数据库,采用静态html
- [ ] 滚动公共栏
db.collection('admin').doc('admin81192').field({
password:true,
_id:false
}).get()
云函数的返回格式:res.result.
wx.cloud.callFunction({
name: 'check_admin',
data: {
username: that.data.username,
password:that.data.password,
},
complete: res => {
that.setData({
checkres:res.result
})
if(that.data.checkres.res){
wx.navigateTo({
url: '/pages/admin/home',
})
}
else
//跳转回主页面
{
that.setData({
loadModal:true
})
//放在compelete外报错:res为null,不知道是不是因为云函数异步调用还未结束
}
},
})