#云开发挑战赛#-柠檬收纳-蓝柠檬科技
应用场景
个人或家庭物品数字化管理,物品收纳、整理、记录、提醒,分享物品使用心得技巧。以扫条形码方式快速录入物品信息,满足人们对物品管理数字化的要求,通过物品点评功能来构建人与人之间的联系
目标用户
个人或家庭用户
实现思路
- 使用云开发创建小程序项目,采用云开发的云函数、云数据库技术进行快速开发完成服务端的登录、查询等功能
- 使用小程序原生开发以及UI框架完成客户端的功能开发
- 物品收纳功能通过扫描物品条形码查询物品相关信息以快速录入物品信息
- 首页展示即将到期和已过期的数量以及我的物品,我的物品按照到期日期从小到大排序
- 网友点评、用户上传物品功能接入微信内容安全API审核。物品信息和图片仅自己可见
- 小程序官网采用docsify制作,使用云开发静态网站托管部署
架构图
功能代码展示
首页wxml
<!--index.wxml-->
<wxs module="tutil" src="../wxs/date.wxs"></wxs>
<view class="index">
<l-grid row-num="2" show-col-border="{{true}}">
<l-grid-item key="one" slot="one">
<view class="num">{{toEndCount}}</view>
<view class="text">即将到期</view>
</l-grid-item>
<l-grid-item key="two" slot="two">
<view class="num">{{outDateCount}}</view>
<view class="text">已过期</view>
</l-grid-item>
</l-grid>
<content-title>
<content-card name="我的物品">
<l-list wx:for="{{thingList}}" wx:key="_id"
tag-content="{{item.endDate == null?'':'到期'+tutil.formatTime(item.endDate)}}" tag-color="{{nowDate >= item.endDate ? '#F4516C':''}}" data-t="{{nowDate}}" tag-position="right"
bind:lintap="toDetail" data-id="{{item._id}}" tagShape="circle" l-image-class="limgage">
<view slot="left-section">
<l-avatar src="{{item.fileIDs[0] == null? defaultImg:item.fileIDs[0]}}" size="70" mode="aspectFill"
text="{{item.name}}" />
</view>
</l-list>
</content-card>
</content-title>
<view style="width:100%;display: flex;justify-content: center;align-items: center;">
<view class="doc-container" bindtap="onAdd">
<image src='/images/add.png' class='doc-img'></image>
</view>
</view>
</view>
云函数条形码查询
// 云函数入口文件
const cloud = require('wx-server-sdk')
const axios = require('axios');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
//todo 密钥,提交代码时去掉
//接口相关信息,需申请,请看部署教程deployment.md
const appConfig = {
app_id: 'app_id',
app_secret: 'app_secret'
}
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
//先查询本地
let tm = new Date().getTime()
const barcode = event.barcode;
let result = await db.collection('good')
.where({
barcode: barcode
}).get()
if (result.data.length > 0) {
return {
code: 1,
data: result.data[0]
}
} else {
var config = {
method: 'get',
url: 'https://查询物品条形码接口/api/barcode/goods/details?app_id=' + appConfig.app_id + '&app_secret=' + appConfig.app_secret + '&barcode=' + barcode
};
let res = await axios(config)
if (res.data.code == 1) {
var key = "createTime";
var value = tm
res.data.data[key] = value
console.log(res.data.data)
await db.collection('good').add({
data: res.data.data
})
}
return res.data
}
}
效果截图
作品体验二维码
官方网站
https://lemonbox.ishare20.net/