|
|
@@ -1,66 +1,102 @@
|
|
|
<template>
|
|
|
<view class="page">
|
|
|
- <view class="section">
|
|
|
- <view class="section-title">选择申请角色 <text class="required">*</text></view>
|
|
|
- <view class="role-grid">
|
|
|
- <view
|
|
|
- v-for="role in roleList"
|
|
|
- :key="role.key"
|
|
|
- class="role-card"
|
|
|
- :class="{ selected: selectedRoles.indexOf(role.key) > -1 }"
|
|
|
- @click="toggleRole(role.key)"
|
|
|
- >
|
|
|
- <text class="role-icon">{{ role.icon }}</text>
|
|
|
- <text class="role-name">{{ role.name }}</text>
|
|
|
- <text v-if="selectedRoles.indexOf(role.key) > -1" class="check-mark">✓</text>
|
|
|
- </view>
|
|
|
+ <!-- 审核状态展示 -->
|
|
|
+ <view v-if="showStatusView" class="status-view">
|
|
|
+ <view class="status-card" :class="'status-' + applyStatus">
|
|
|
+ <view class="status-icon">{{ statusIcon }}</view>
|
|
|
+ <text class="status-title">{{ statusTitle }}</text>
|
|
|
+ <text class="status-desc">{{ statusDesc }}</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="applyStatus === 'pending'" class="status-tip">
|
|
|
+ <text>预计 1-3 个工作日内完成审核,请耐心等待</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="applyStatus === 'rejected'" class="reject-info">
|
|
|
+ <text class="reject-label">拒绝原因</text>
|
|
|
+ <text class="reject-reason">{{ applyRecord && applyRecord.rejectReason }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="action-buttons">
|
|
|
+ <button v-if="applyStatus === 'rejected'" class="btn-reapply" @click="handleReapply">
|
|
|
+ 重新申请
|
|
|
+ </button>
|
|
|
+ <button v-if="applyStatus === 'approved'" class="btn-center" @click="goToCenter">
|
|
|
+ 进入服务商中心
|
|
|
+ </button>
|
|
|
+ <button class="btn-back" @click="uni.navigateBack">返回首页</button>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <view class="section">
|
|
|
- <view class="section-title">身份证信息</view>
|
|
|
- <input class="input" v-model="form.idCard" placeholder="请输入身份证号码" maxlength="18" />
|
|
|
- <view class="upload-row">
|
|
|
- <view class="upload-item" @click="chooseIdCardImage('front')">
|
|
|
- <image v-if="form.idCardFront" :src="form.idCardFront" mode="aspectFill" class="upload-preview" />
|
|
|
- <view v-else class="upload-placeholder">
|
|
|
- <text class="upload-icon">+</text>
|
|
|
- <text class="upload-label">身份证正面</text>
|
|
|
+ <!-- 申请表单 -->
|
|
|
+ <view v-else class="form-wrap">
|
|
|
+ <view class="header">
|
|
|
+ <text class="title">服务角色申请</text>
|
|
|
+ <text class="subtitle">选择申请角色,提交资质信息</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-title">选择申请角色 <text class="required">*</text></view>
|
|
|
+ <view class="role-grid">
|
|
|
+ <view
|
|
|
+ v-for="role in roleList"
|
|
|
+ :key="role.key"
|
|
|
+ class="role-card"
|
|
|
+ :class="{ selected: selectedRoles.indexOf(role.key) > -1 }"
|
|
|
+ @click="toggleRole(role.key)"
|
|
|
+ >
|
|
|
+ <text class="role-icon">{{ role.icon }}</text>
|
|
|
+ <text class="role-name">{{ role.name }}</text>
|
|
|
+ <view v-if="selectedRoles.indexOf(role.key) > -1" class="check-mark">✓</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view class="upload-item" @click="chooseIdCardImage('back')">
|
|
|
- <image v-if="form.idCardBack" :src="form.idCardBack" mode="aspectFill" class="upload-preview" />
|
|
|
- <view v-else class="upload-placeholder">
|
|
|
- <text class="upload-icon">+</text>
|
|
|
- <text class="upload-label">身份证反面</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-title">身份证信息</view>
|
|
|
+ <input class="input" v-model="form.idCard" placeholder="请输入身份证号码" maxlength="18" />
|
|
|
+ <view class="upload-row">
|
|
|
+ <view class="upload-item" @click="chooseIdCardImage('front')">
|
|
|
+ <image v-if="form.idCardFront" :src="form.idCardFront" mode="aspectFill" class="upload-preview" />
|
|
|
+ <view v-else class="upload-placeholder">
|
|
|
+ <text class="upload-icon">+</text>
|
|
|
+ <text class="upload-label">身份证正面</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="upload-item" @click="chooseIdCardImage('back')">
|
|
|
+ <image v-if="form.idCardBack" :src="form.idCardBack" mode="aspectFill" class="upload-preview" />
|
|
|
+ <view v-else class="upload-placeholder">
|
|
|
+ <text class="upload-icon">+</text>
|
|
|
+ <text class="upload-label">身份证反面</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
|
|
|
- <view class="section">
|
|
|
- <view class="section-title">资质证书</view>
|
|
|
- <view class="cert-list">
|
|
|
- <view v-for="(img, idx) in form.certificateImages" :key="getCertKey(idx)" class="cert-item">
|
|
|
- <image :src="img" mode="aspectFill" class="cert-preview" />
|
|
|
- <text class="cert-del" @click="removeCert(idx)">×</text>
|
|
|
- </view>
|
|
|
- <view class="cert-add" @click="chooseCertificate">
|
|
|
- <text class="upload-icon">+</text>
|
|
|
- <text class="upload-label">添加证书</text>
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-title">资质证书</view>
|
|
|
+ <view class="cert-list">
|
|
|
+ <view v-for="(img, idx) in form.certificateImages" :key="getCertKey(idx)" class="cert-item">
|
|
|
+ <image :src="img" mode="aspectFill" class="cert-preview" />
|
|
|
+ <text class="cert-del" @click="removeCert(idx)">×</text>
|
|
|
+ </view>
|
|
|
+ <view class="cert-add" @click="chooseCertificate">
|
|
|
+ <text class="upload-icon">+</text>
|
|
|
+ <text class="upload-label">添加证书</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
|
|
|
- <view class="section">
|
|
|
- <view class="section-title">联系地址 <text class="required">*</text></view>
|
|
|
- <AddressPicker ref="addressPicker" @change="onAddressChange" />
|
|
|
- <input class="input" v-model="form.addressDetail" placeholder="详细地址(门牌号等)" />
|
|
|
- </view>
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-title">联系地址 <text class="required">*</text></view>
|
|
|
+ <AddressPicker ref="addressPicker" @change="onAddressChange" />
|
|
|
+ <input class="input" v-model="form.addressDetail" placeholder="详细地址(门牌号等)" />
|
|
|
+ </view>
|
|
|
|
|
|
- <button class="submit-btn" :disabled="submitting" @click="handleSubmit">
|
|
|
- {{ submitting ? '提交中...' : '提交申请' }}
|
|
|
- </button>
|
|
|
+ <button class="submit-btn" :disabled="submitting" @click="handleSubmit">
|
|
|
+ {{ submitting ? '提交中...' : '提交申请' }}
|
|
|
+ </button>
|
|
|
+ <view class="footer-hint">
|
|
|
+ <text>提交后将在 1-3 个工作日内完成审核</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
@@ -92,7 +128,29 @@ export default {
|
|
|
street: '',
|
|
|
addressDetail: ''
|
|
|
},
|
|
|
- submitting: false
|
|
|
+ submitting: false,
|
|
|
+ applyRecord: null,
|
|
|
+ showStatusView: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ applyStatus() {
|
|
|
+ if (!this.applyRecord) return 'none'
|
|
|
+ const s = this.applyRecord.status
|
|
|
+ return s === 0 ? 'pending' : s === 1 ? 'approved' : 'rejected'
|
|
|
+ },
|
|
|
+ statusIcon() {
|
|
|
+ return { pending: '⏳', approved: '✅', rejected: '❌' }[this.applyStatus] || '📋'
|
|
|
+ },
|
|
|
+ statusTitle() {
|
|
|
+ return { pending: '审核中', approved: '申请已通过', rejected: '申请被驳回' }[this.applyStatus] || ''
|
|
|
+ },
|
|
|
+ statusDesc() {
|
|
|
+ return {
|
|
|
+ pending: '您的申请正在审核中,请留意消息通知',
|
|
|
+ approved: '恭喜!您已成功通过审核,可以开始使用服务商功能',
|
|
|
+ rejected: '您的申请未通过审核,可查看原因后重新提交'
|
|
|
+ }[this.applyStatus] || ''
|
|
|
}
|
|
|
},
|
|
|
onLoad() {
|
|
|
@@ -102,16 +160,21 @@ export default {
|
|
|
async checkExistingApply() {
|
|
|
try {
|
|
|
const res = await getMyServiceRoleApply()
|
|
|
- if (res.code === 200 && res.data && res.data.status === 0) {
|
|
|
- uni.showModal({
|
|
|
- title: '提示',
|
|
|
- content: '您已提交过申请,请等待审核',
|
|
|
- showCancel: false,
|
|
|
- success: () => uni.navigateBack()
|
|
|
- })
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
+ this.applyRecord = res.data
|
|
|
+ const status = res.data.status
|
|
|
+ if (status === 0) {
|
|
|
+ this.showStatusView = true
|
|
|
+ } else if (status === 1) {
|
|
|
+ // 已通过,跳转服务商中心
|
|
|
+ setTimeout(() => uni.redirectTo({ url: '/pages/vendor/center' }), 800)
|
|
|
+ } else if (status === 2) {
|
|
|
+ // 已拒绝,显示原因
|
|
|
+ this.showStatusView = true
|
|
|
+ }
|
|
|
}
|
|
|
} catch (e) {
|
|
|
- // 忽略错误
|
|
|
+ // 无申请记录,显示表单
|
|
|
}
|
|
|
},
|
|
|
toggleRole(key) {
|
|
|
@@ -151,7 +214,7 @@ export default {
|
|
|
},
|
|
|
async chooseCertificate() {
|
|
|
uni.chooseImage({
|
|
|
- count: 9,
|
|
|
+ count: 9 - this.form.certificateImages.length,
|
|
|
sizeType: ['compressed'],
|
|
|
sourceType: ['album', 'camera'],
|
|
|
success: async (res) => {
|
|
|
@@ -214,12 +277,9 @@ export default {
|
|
|
})
|
|
|
uni.hideLoading()
|
|
|
if (res.code === 200) {
|
|
|
- uni.showModal({
|
|
|
- title: '提交成功',
|
|
|
- content: '申请已提交,请等待后台审核',
|
|
|
- showCancel: false,
|
|
|
- success: () => uni.navigateBack()
|
|
|
- })
|
|
|
+ // 提交成功,刷新状态
|
|
|
+ await this.checkExistingApply()
|
|
|
+ if (!this.showStatusView) this.showStatusView = true
|
|
|
} else {
|
|
|
uni.showToast({ title: res.message || '提交失败', icon: 'none' })
|
|
|
}
|
|
|
@@ -229,6 +289,25 @@ export default {
|
|
|
} finally {
|
|
|
this.submitting = false
|
|
|
}
|
|
|
+ },
|
|
|
+ handleReapply() {
|
|
|
+ this.applyRecord = null
|
|
|
+ this.showStatusView = false
|
|
|
+ this.selectedRoles = []
|
|
|
+ this.form = {
|
|
|
+ idCard: '',
|
|
|
+ idCardFront: '',
|
|
|
+ idCardBack: '',
|
|
|
+ certificateImages: [],
|
|
|
+ province: '',
|
|
|
+ city: '',
|
|
|
+ district: '',
|
|
|
+ street: '',
|
|
|
+ addressDetail: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ goToCenter() {
|
|
|
+ uni.redirectTo({ url: '/pages/vendor/center' })
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -237,24 +316,150 @@ export default {
|
|
|
<style>
|
|
|
.page {
|
|
|
min-height: 100vh;
|
|
|
- background: #f5f5f5;
|
|
|
- padding: 20rpx 30rpx 100rpx;
|
|
|
+ background: linear-gradient(180deg, #FFF7ED 0%, #F8F8F8 30%);
|
|
|
+ padding: 0 30rpx 120rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* ===== 状态展示区 ===== */
|
|
|
+.status-view {
|
|
|
+ padding-top: 60rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.status-card {
|
|
|
+ width: 100%;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ padding: 60rpx 40rpx;
|
|
|
+ text-align: center;
|
|
|
+ margin-bottom: 30rpx;
|
|
|
+}
|
|
|
+.status-card.status-pending {
|
|
|
+ background: linear-gradient(135deg, #FFFBEB, #FEF3C7);
|
|
|
+ border: 2rpx solid #FDE68A;
|
|
|
+}
|
|
|
+.status-card.status-approved {
|
|
|
+ background: linear-gradient(135deg, #F0FDF4, #DCFCE7);
|
|
|
+ border: 2rpx solid #86EFAC;
|
|
|
+}
|
|
|
+.status-card.status-rejected {
|
|
|
+ background: linear-gradient(135deg, #FEF2F2, #FEE2E2);
|
|
|
+ border: 2rpx solid #FCA5A5;
|
|
|
+}
|
|
|
+.status-icon {
|
|
|
+ font-size: 80rpx;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+}
|
|
|
+.status-title {
|
|
|
+ font-size: 36rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #1F2937;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+}
|
|
|
+.status-desc {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #6B7280;
|
|
|
+ line-height: 1.6;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.status-tip {
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 20rpx 28rpx;
|
|
|
+ margin-bottom: 40rpx;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.status-tip text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #92400E;
|
|
|
+}
|
|
|
+.reject-info {
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 28rpx;
|
|
|
+ margin-bottom: 40rpx;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.reject-label {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #9CA3AF;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+}
|
|
|
+.reject-reason {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #DC2626;
|
|
|
+ line-height: 1.6;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.action-buttons {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20rpx;
|
|
|
+}
|
|
|
+.btn-reapply, .btn-center, .btn-back {
|
|
|
+ width: 100%;
|
|
|
+ height: 88rpx;
|
|
|
+ line-height: 88rpx;
|
|
|
+ border-radius: 44rpx;
|
|
|
+ font-size: 30rpx;
|
|
|
+ text-align: center;
|
|
|
+ border: none;
|
|
|
+}
|
|
|
+.btn-reapply {
|
|
|
+ background: linear-gradient(135deg, #F97316, #FB923C);
|
|
|
+ color: #fff;
|
|
|
+}
|
|
|
+.btn-center {
|
|
|
+ background: linear-gradient(135deg, #10B981, #34D399);
|
|
|
+ color: #fff;
|
|
|
+}
|
|
|
+.btn-back {
|
|
|
+ background: #F3F4F6;
|
|
|
+ color: #6B7280;
|
|
|
+}
|
|
|
+
|
|
|
+/* ===== 表单区 ===== */
|
|
|
+.header {
|
|
|
+ text-align: center;
|
|
|
+ padding: 50rpx 0 30rpx;
|
|
|
+}
|
|
|
+.title {
|
|
|
+ font-size: 42rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #1F2937;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.subtitle {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #9CA3AF;
|
|
|
+ margin-top: 10rpx;
|
|
|
+ display: block;
|
|
|
}
|
|
|
.section {
|
|
|
background: #fff;
|
|
|
- border-radius: 16rpx;
|
|
|
+ border-radius: 20rpx;
|
|
|
padding: 30rpx;
|
|
|
- margin-bottom: 20rpx;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04);
|
|
|
}
|
|
|
.section-title {
|
|
|
font-size: 28rpx;
|
|
|
font-weight: bold;
|
|
|
- margin-bottom: 20rpx;
|
|
|
- color: #333;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ color: #374151;
|
|
|
}
|
|
|
.required {
|
|
|
- color: #ff4444;
|
|
|
+ color: #EF4444;
|
|
|
+ margin-left: 4rpx;
|
|
|
}
|
|
|
+
|
|
|
+/* 角色网格 */
|
|
|
.role-grid {
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|
|
|
@@ -262,45 +467,52 @@ export default {
|
|
|
}
|
|
|
.role-card {
|
|
|
width: calc((100% - 40rpx) / 3);
|
|
|
- background: #f8f8f8;
|
|
|
- border-radius: 12rpx;
|
|
|
- padding: 24rpx 0;
|
|
|
+ background: #F9FAFB;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 30rpx 0;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
position: relative;
|
|
|
- border: 2rpx solid transparent;
|
|
|
+ border: 3rpx solid transparent;
|
|
|
+ transition: all 0.2s;
|
|
|
}
|
|
|
.role-card.selected {
|
|
|
- background: #fff7ed;
|
|
|
- border-color: #f97316;
|
|
|
+ background: #FFF7ED;
|
|
|
+ border-color: #F97316;
|
|
|
}
|
|
|
.role-icon {
|
|
|
- font-size: 40rpx;
|
|
|
- margin-bottom: 8rpx;
|
|
|
+ font-size: 44rpx;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
}
|
|
|
.role-name {
|
|
|
font-size: 24rpx;
|
|
|
- color: #333;
|
|
|
+ color: #374151;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
.check-mark {
|
|
|
position: absolute;
|
|
|
top: 8rpx;
|
|
|
right: 12rpx;
|
|
|
- color: #f97316;
|
|
|
- font-size: 28rpx;
|
|
|
+ color: #F97316;
|
|
|
+ font-size: 32rpx;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
+
|
|
|
+/* 输入框 */
|
|
|
.input {
|
|
|
width: 100%;
|
|
|
height: 72rpx;
|
|
|
- border: 2rpx solid #eee;
|
|
|
- border-radius: 8rpx;
|
|
|
- padding: 0 20rpx;
|
|
|
+ border: 2rpx solid #E5E7EB;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 0 24rpx;
|
|
|
font-size: 26rpx;
|
|
|
box-sizing: border-box;
|
|
|
margin-bottom: 16rpx;
|
|
|
+ background: #FAFAFA;
|
|
|
}
|
|
|
+
|
|
|
+/* 图片上传 */
|
|
|
.upload-row {
|
|
|
display: flex;
|
|
|
gap: 20rpx;
|
|
|
@@ -308,12 +520,13 @@ export default {
|
|
|
.upload-item {
|
|
|
flex: 1;
|
|
|
height: 200rpx;
|
|
|
- border: 2rpx dashed #ddd;
|
|
|
- border-radius: 12rpx;
|
|
|
+ border: 3rpx dashed #D1D5DB;
|
|
|
+ border-radius: 16rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
overflow: hidden;
|
|
|
+ background: #FAFAFA;
|
|
|
}
|
|
|
.upload-placeholder {
|
|
|
display: flex;
|
|
|
@@ -322,17 +535,19 @@ export default {
|
|
|
}
|
|
|
.upload-icon {
|
|
|
font-size: 48rpx;
|
|
|
- color: #ccc;
|
|
|
+ color: #9CA3AF;
|
|
|
}
|
|
|
.upload-label {
|
|
|
font-size: 22rpx;
|
|
|
- color: #999;
|
|
|
+ color: #9CA3AF;
|
|
|
margin-top: 8rpx;
|
|
|
}
|
|
|
.upload-preview {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
}
|
|
|
+
|
|
|
+/* 证书列表 */
|
|
|
.cert-list {
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|
|
|
@@ -342,7 +557,7 @@ export default {
|
|
|
width: 160rpx;
|
|
|
height: 160rpx;
|
|
|
position: relative;
|
|
|
- border-radius: 8rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
.cert-preview {
|
|
|
@@ -353,41 +568,51 @@ export default {
|
|
|
position: absolute;
|
|
|
top: 4rpx;
|
|
|
right: 4rpx;
|
|
|
- width: 32rpx;
|
|
|
- height: 32rpx;
|
|
|
- background: rgba(0,0,0,0.5);
|
|
|
+ width: 36rpx;
|
|
|
+ height: 36rpx;
|
|
|
+ background: rgba(0,0,0,0.55);
|
|
|
color: #fff;
|
|
|
border-radius: 50%;
|
|
|
text-align: center;
|
|
|
- line-height: 32rpx;
|
|
|
- font-size: 24rpx;
|
|
|
+ line-height: 36rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
}
|
|
|
.cert-add {
|
|
|
width: 160rpx;
|
|
|
height: 160rpx;
|
|
|
- border: 2rpx dashed #ddd;
|
|
|
- border-radius: 8rpx;
|
|
|
+ border: 3rpx dashed #D1D5DB;
|
|
|
+ border-radius: 12rpx;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
+ background: #FAFAFA;
|
|
|
}
|
|
|
+
|
|
|
+/* 提交按钮 */
|
|
|
.submit-btn {
|
|
|
width: 100%;
|
|
|
- height: 88rpx;
|
|
|
- background: linear-gradient(135deg, #f97316, #fb923c);
|
|
|
+ height: 96rpx;
|
|
|
+ line-height: 96rpx;
|
|
|
+ background: linear-gradient(135deg, #F97316, #FB923C);
|
|
|
color: #fff;
|
|
|
+ border-radius: 48rpx;
|
|
|
font-size: 32rpx;
|
|
|
- border-radius: 44rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- position: fixed;
|
|
|
- bottom: 40rpx;
|
|
|
- left: 30rpx;
|
|
|
- width: calc(100% - 60rpx);
|
|
|
+ font-weight: 600;
|
|
|
+ margin-top: 16rpx;
|
|
|
+ border: none;
|
|
|
+ box-shadow: 0 8rpx 24rpx rgba(249, 115, 22, 0.3);
|
|
|
}
|
|
|
.submit-btn[disabled] {
|
|
|
opacity: 0.6;
|
|
|
+ box-shadow: none;
|
|
|
+}
|
|
|
+.footer-hint {
|
|
|
+ text-align: center;
|
|
|
+ margin-top: 24rpx;
|
|
|
+}
|
|
|
+.footer-hint text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #9CA3AF;
|
|
|
}
|
|
|
-</style>
|
|
|
+</style>
|