feat: add resident miniapp MVP
This commit is contained in:
@@ -1 +1,71 @@
|
||||
Page({})
|
||||
const { calculateExpressFeeCent, createExpressOrder } = require('../../api/expressApi')
|
||||
const { listAddresses } = require('../../api/addressApi')
|
||||
const { setField } = require('../../utils/request')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
addresses: [],
|
||||
addressIndex: 0,
|
||||
feeCent: 300,
|
||||
submitting: false,
|
||||
form: {
|
||||
expressCompany: '',
|
||||
pickupCode: '',
|
||||
pickupAddress: '',
|
||||
receiverPhone: '',
|
||||
addressId: null,
|
||||
packageCount: 1,
|
||||
remark: ''
|
||||
}
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
listAddresses()
|
||||
.then((addresses) => {
|
||||
this.setData({
|
||||
addresses: addresses || [],
|
||||
'form.addressId': addresses && addresses[0] ? addresses[0].id : null
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
|
||||
onFieldInput(event) {
|
||||
setField(this, event)
|
||||
},
|
||||
|
||||
onAddressChange(event) {
|
||||
const index = Number(event.detail.value)
|
||||
const address = this.data.addresses[index]
|
||||
this.setData({
|
||||
addressIndex: index,
|
||||
'form.addressId': address ? address.id : null
|
||||
})
|
||||
},
|
||||
|
||||
onPackageCountChange(event) {
|
||||
const packageCount = Number(event.detail.value || 1)
|
||||
this.setData({
|
||||
'form.packageCount': packageCount,
|
||||
feeCent: calculateExpressFeeCent(packageCount)
|
||||
})
|
||||
},
|
||||
|
||||
submit() {
|
||||
if (this.data.submitting) {
|
||||
return
|
||||
}
|
||||
if (!this.data.form.addressId) {
|
||||
wx.showToast({ title: '请先添加地址', icon: 'none' })
|
||||
return
|
||||
}
|
||||
this.setData({ submitting: true })
|
||||
createExpressOrder(this.data.form)
|
||||
.then(() => {
|
||||
wx.showToast({ title: '已提交' })
|
||||
wx.navigateTo({ url: '/pages/orders/index' })
|
||||
})
|
||||
.catch((error) => wx.showToast({ title: error.message, icon: 'none' }))
|
||||
.finally(() => this.setData({ submitting: false }))
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1 +1,23 @@
|
||||
<view class="page">代取快递</view>
|
||||
<view class="page">
|
||||
<view class="section-title">代取快递</view>
|
||||
<view class="card">
|
||||
<input class="input" placeholder="快递公司" data-field="expressCompany" bindinput="onFieldInput" />
|
||||
<input class="input" placeholder="取件码" data-field="pickupCode" bindinput="onFieldInput" />
|
||||
<input class="input" placeholder="快递站地址" data-field="pickupAddress" bindinput="onFieldInput" />
|
||||
<input class="input" placeholder="手机号" data-field="receiverPhone" bindinput="onFieldInput" />
|
||||
<view class="muted">送达地址</view>
|
||||
<picker mode="selector" range="{{addresses}}" range-key="detail" value="{{addressIndex}}" bindchange="onAddressChange">
|
||||
<view class="picker">{{addresses[addressIndex] ? addresses[addressIndex].building + ' ' + addresses[addressIndex].room + ' ' + addresses[addressIndex].detail : '请选择地址'}}</view>
|
||||
</picker>
|
||||
<input class="input" type="number" value="{{form.packageCount}}" bindinput="onPackageCountChange" />
|
||||
<view class="card">
|
||||
<view class="row between">
|
||||
<text>预估服务费</text>
|
||||
<text class="price">¥{{feeCent / 100}}</text>
|
||||
</view>
|
||||
<view class="muted">首件 3 元,续件每件 1 元</view>
|
||||
</view>
|
||||
<textarea class="textarea" placeholder="备注" data-field="remark" bindinput="onFieldInput" />
|
||||
<button class="primary" loading="{{submitting}}" bindtap="submit">提交代取</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
.page {
|
||||
min-height: 100vh;
|
||||
.card .card {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user