hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
🦁作者简介:一名喜欢分享和记录学习的在校大学生
💥个人主页:code袁的博客
💥 个人QQ:2647996100
🐯 个人wechat:code8896
code袁系列专栏导航
1.《毕业设计与课程设计》本专栏分享一些毕业设计的源码以及项目成果。🥰🥰🥰
2.《微信小程序开发》本专栏从基础到入门的一系开发流程,并且分享了自己在开发中遇到的一系列问题。🤹🤹🤹
3.《vue开发系列全程线路》本专栏分享自己的vue的学习历程。非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
B站讲解视频
上篇文章
1.接单页面的开发
<view class="tabr">
<view class="rw">最新任务</view>
<view class="top" wx:for="{{taskList}}">
<view class="top_left">
<view class="item">{{item.taskType}}</view>
<view class="money">佣金{{item.money}}</view>
</view>
<view class="start">取件地址:{{item.startAdddress}}</view>
<view class="end">送达地址:{{item.endAdddress}}</view>
<view class="bottom">
<view class="time">服务时间:{{item.time}}</view>
<view class="help">帮ta</view>
</view>
</view>
</view>
.rw{
margin: 15rpx 30rpx;
font-size: 38rpx;
font-weight: 600;
}
.top{
width: 90%;
margin: 15rpx auto;
box-shadow: 0 0 15px rgb(0 0 0 / 20%);
height: 240rpx;
padding: 10rpx 20rpx;
}
.top_left{
font-size: 36rpx;
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
}
.money{
color: rgb(255, 161, 20);
}
.start{
margin-bottom: 20rpx;
}
.bottom{
margin-top: 10rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.help{
width: 150rpx;
height: 70rpx;
text-align: center;
line-height: 70rpx;
border-radius: 35rpx;
color: white;
background-color: #1296db;
margin-bottom: -20rpx;
}
// components/task/task.js
Component({
/**
* 组件的属性列表
*/
properties: {
taskList:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
taskList:[]
},
/**
* 组件的方法列表
*/
methods: {
}
})
实现效果
2.发布页面的开发
user.js
发布页面的代码
<view class="top">
<view class="address">
<view class="startAddress">取件地址</view>
<input type="text" placeholder="请输入取件地址" bindinput="startAddress" />
<view class="endAddress">收货地址</view>
<input type="text" placeholder="请输入取件地址" bindinput="endAddress"/>
<view class="endAddress">联系电话</view>
<input type="text" placeholder="请输入联系电话" bindinput="phone"/>
</view>
<view class="shopdetail">
<view class="name"><text style="color: red;">*</text> 物品名称:<input type="text" placeholder="物品名称" bindinput="name" /></view>
<view class="desc">描述信息:<textarea placeholder="描述信息" bindinput="desc" /></view>
<view class="zl">物品重量:<input type="text" placeholder="物品重量" bindinput="weight" /></view>
<view class="type">
<text style="color: red;">*</text> 物品类别:
<picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
<view class="picker">
{{array[index]}}
</view>
</picker>
</view>
<view class="price">
<text style="color: red;">*</text> 小费:
<button bind:tap="delet" data-value="{{price}}">-</button>
<text style="margin-left: 25rpx;">{{price}}</text>
<button bind:tap="add" data-value="{{price}}" style="margin-left: 25rpx;">+</button>
</view>
<view class="img">物品图片:
<image wx:if="{{imgUrl}}" src="{{imgUrl}}" mode=""/>
<image wx:else bind:tap="goupload" src="../../image/index/upload.png" mode=""/>
</view>
</view>
<button class="gopublic" bind:tap="goPublic">发布</button>
</view>
/* pages/send/send.wxss */
.address{
margin: 15rpx auto;
width: 92%;
box-shadow: 0 0 15px rgb(0 0 0 / 20%);
padding: 10rpx;
}
.startAddress,.endAddress{
font-weight: 600;
font-size: 36rpx;
margin: 15rpx 10rpx;
border-left: 5rpx solid #1296db;
padding-left: 10rpx;
}
.address input{
height: 50rpx;
padding: 10rpx;
border-bottom: 1rpx dashed gainsboro;
}
.shopdetail {
margin: 20rpx auto;
width: 92%;
box-shadow: 0 0 15px rgb(0 0 0 / 20%);
padding: 10rpx;
font-size: 36rpx;
}
.name{
display: flex;
margin: 15rpx 10rpx;
align-items: center;
font-size: 36rpx;
}
.name input{
width: 66%;
height: 65rpx;
padding-left: 10rpx;
border-bottom: 1rpx dashed gainsboro;
}
.desc{
margin: 15rpx 20rpx;
display: flex;
}
.desc textarea{
width: 70%;
height: 120rpx;
border-bottom: 1rpx dashed gainsboro;
margin-left: 20rpx;
}
.type{
margin: 30rpx 20rpx;
display: flex;
}
.price{
margin: 25rpx 20rpx;
display: flex;
}
.price button{
width: 60rpx;
padding: 0;
margin: 0;
height: 60rpx;
line-height: 50rpx;
}
.zl{
display: flex;
margin: 20rpx 20rpx;
}
.zl input{
width: 70%;
height: 65rpx;
border-bottom: 1rpx dashed gainsboro;
margin-left: 20rpx;
}
.img{
margin: 20rpx 20rpx;
display:flex;
}
.img image{
width: 250rpx;
height: 250rpx;
}
.gopublic{
background-color: #1296db;
width: 80%;
margin: 50rpx auto;
border-radius: 50rpx;
color: white;
}
// pages/send/send.js
const {addTask} =require('../../api/user')
Page({
/**
* 页面的初始数据
*/
data: {
array: ['取快递', '取外卖', '代买零食', '打印'],
index:0,
imgUrl:'',
price:0,
startAddress:'',
endAddress:'',
phone:'',
name:'',
desc:'',
weight:''
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
startAddress(e){
this.setData({
startAddress:e.detail.value
})
},
endAddress(e){
this.setData({
endAddress:e.detail.value
})
},
phone(e){
this.setData({
phone:e.detail.value
})
},
name(e){
this.setData({
name:e.detail.value
})
},
desc(e){
this.setData({
desc:e.detail.value
})
},
weight(e){
this.setData({
weight:e.detail.value
})
},
add(e){
let value=e.currentTarget.dataset.value
this.setData({
price:value+1
})
},
delet(e){
let value=e.currentTarget.dataset.value
if(value<2){
wx.showToast({
title: '小费不能为零',
icon:'none'
})
}else{
this.setData({
price:value-1
})
}
},
bindPickerChange: function(e) {
this.setData({
index: e.detail.value
})
},
goupload(res){
let that=this
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success (res) {
var imgsFile = res.tempFilePaths[0];
that.setData({
imgUrl:imgsFile
})
wx.uploadFile({
filePath: imgsFile,
name: 'file',
url: 'http://localhost:3000/upload/upload',
success: res => {
that.data.userInfo.imgUrl=JSON.parse(res.data).url
}
})
}
})
},
goPublic(){
if(this.data.startAddress==''){
wx.showToast({
title: '取件地址不能为空',
icon:"none"
})
}else if(this.data.endAddress==''){
wx.showToast({
title: '收货地址不能为空',
icon:"none"
})
}else if(this.data.phone==''){
wx.showToast({
title: '手机号不能为空',
icon:"none"
})
}else if(this.data.name==''){
wx.showToast({
title: '物品名称不能为空',
icon:"none"
})
}else if(this.data.price==0){
wx.showToast({
title: '佣金不能为零',
icon:"none"
})
} else{
let data={
startAddress:this.data.startAddress,
endAddress:this.data.endAddress,
phone:this.data.phone,
name:this.data.name,
desc:this.data.desc,
weight:this.data.weight,
type:this.data.array[this.data.index],
price:this.data.price,
imgUrl:this.data.imgUrl,
user_id:wx.getStorageSync('userInfo').id
}
addTask(data).then(res=>{
if(res.code==200){
wx.showToast({
title: '发布成功',
icon:"none"
})
}
})
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
3.后端模板下载
如果需要后端模板的可以下面这个gitee的地址去下载
vscode 的下载,node 下载以及vue脚手架的安装可以去看看这个篇文章,大家有啥不懂的都可以去看我发布的视频。重要的环节我都已视频的形式表达了。
🎉写在最后
🍻伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞👍或 Star ✨支持一下哦!手动码字,如有错误,欢迎在评论区指正💬~
你的支持就是我更新的最大动力💪~