|
|
- <template>
- <view class="container">
- <!-- 顶部导航 -->
- <view class="nav-bar">
- <view class="back" @tap="goBack">
- <uni-icons type="left" size="20"></uni-icons>
- </view>
- <text class="title">修改地址</text>
- </view>
-
- <!-- 表单内容 -->
- <view class="form-content">
- <!-- 寄件人信息卡片 -->
- <view class="form-card">
- <view class="card-title">寄件人信息</view>
- <view class="form-item">
- <text class="label">寄件人姓名</text>
- <input
- class="input"
- type="text"
- v-model="formData.name"
- placeholder="请输入姓名"
- />
- </view>
- <view class="form-item">
- <text class="label">寄件人电话</text>
- <input
- class="input"
- type="number"
- v-model="formData.phone"
- placeholder="请输入手机号"
- />
- </view>
- </view>
-
- <!-- 寄件人地址卡片 -->
- <view class="form-card">
- <view class="card-title">寄件地址</view>
- <view class="form-item">
- <text class="label">寄件地址</text>
- <input
- class="input"
- type="text"
- v-model="formData.address"
- placeholder="请输入详细地址"
- />
- </view>
- </view>
- </view>
-
- <!-- 底部确认按钮 -->
- <view class="bottom-btn" @tap="confirmEdit">确认</view>
- </view>
- </template>
-
- <script>
- import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
-
- export default {
- mixins: [pullRefreshMixin],
- data() {
- return {
- formData: {
- name: '',
- phone: '',
- address: ''
- }
- }
- },
- onLoad(options) {
- // 如果是编辑模式,填充表单数据
- if (options.mode === 'edit') {
- this.formData = {
- name: decodeURIComponent(options.name || ''),
- phone: options.phone || '',
- address: decodeURIComponent(options.address || '')
- }
- }
- },
- methods: {
- async onRefresh() {
- // 模拟刷新数据
- await new Promise(resolve => setTimeout(resolve, 1000))
- this.stopPullRefresh()
- },
- goBack() {
- uni.navigateBack()
- },
- confirmEdit() {
- // 表单验证
- if (!this.formData.name.trim()) {
- return uni.showToast({
- title: '请输入姓名',
- icon: 'none'
- })
- }
- if (!/^1\d{10}$/.test(this.formData.phone)) {
- return uni.showToast({
- title: '请输入正确的手机号',
- icon: 'none'
- })
- }
- if (!this.formData.address.trim()) {
- return uni.showToast({
- title: '请输入地址',
- icon: 'none'
- })
- }
-
- // 获取上一页实例并更新数据
- const pages = getCurrentPages()
- const prevPage = pages[pages.length - 2]
- if (prevPage) {
- // 更新地址列表中的对应项
- const addressList = prevPage.$vm.addressList
- const index = addressList.findIndex(item =>
- item.phone === this.formData.phone &&
- item.address === this.formData.address
- )
- if (index > -1) {
- addressList[index] = { ...this.formData }
- }
- }
-
- uni.navigateBack()
- }
- }
- }
- </script>
-
- <style lang="scss" scoped>
- .container {
- min-height: 100vh;
- background: #f5f5f5;
- padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
- }
-
- .nav-bar {
- display: flex;
- align-items: center;
- height: 88rpx;
- background: #fff;
- padding: 0 30rpx;
-
- .back {
- padding: 20rpx;
- margin-left: -20rpx;
- }
-
- .title {
- flex: 1;
- text-align: center;
- font-size: 34rpx;
- font-weight: 500;
- }
-
- .right-btns {
- display: flex;
- align-items: center;
- gap: 30rpx;
-
- .more, .target {
- font-size: 40rpx;
- color: #333;
- }
- }
- }
-
- .form-content {
- padding: 20rpx;
- }
-
- .form-card {
- background: #fff;
- border-radius: 20rpx;
- margin-bottom: 20rpx;
- overflow: hidden;
-
- .card-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- padding: 30rpx;
- }
-
- .form-item {
- padding: 20rpx 30rpx;
- border-top: 1rpx solid #f5f5f5;
-
- .label {
- font-size: 28rpx;
- color: #333;
- margin-bottom: 20rpx;
- display: block;
- }
-
- .input {
- font-size: 28rpx;
- color: #333;
- width: 100%;
- }
- }
- }
-
- .bottom-btn {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- height: 100rpx;
- background: #FFB74D;
- color: #fff;
- font-size: 32rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- padding-bottom: env(safe-area-inset-bottom);
- }
- </style>
|