2025-04-01 21:35:30 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="page">
|
|
|
|
|
|
<u-navbar title="运营配置" :border-bottom="false" :background="bgc" title-color='#000' title-size='36'
|
|
|
|
|
|
height='45'></u-navbar>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view class="tab" :style="{ top: navOffsetTop + 'px' }">
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view :class="tabindex == 0 ? 'tabactive' : ''" hover-class="tab-item-press app-tap-hover" hover-stay-time="80" @click="btntab(0)">
|
2025-04-16 09:14:52 +08:00
|
|
|
|
基础信息
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<text></text>
|
2025-04-16 09:14:52 +08:00
|
|
|
|
</view>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view :class="tabindex == 1 ? 'tabactive' : ''" hover-class="tab-item-press app-tap-hover" hover-stay-time="80" @click="btntab(1)">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
骑行设置
|
|
|
|
|
|
<text></text>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view :class="tabindex == 2 ? 'tabactive' : ''" hover-class="tab-item-press app-tap-hover" hover-stay-time="80" @click="btntab(2)">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
还车设置
|
|
|
|
|
|
<text></text>
|
2025-06-06 11:32:12 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view class="tab-placeholder"></view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<scroll-view class="sys-set-scroll" scroll-y="true" :scroll-into-view="scrollIntoView" scroll-with-animation
|
2026-05-21 09:43:14 +08:00
|
|
|
|
:enable-back-to-top="true" :show-scrollbar="false"
|
2026-04-28 14:01:46 +08:00
|
|
|
|
style="height: 72vh;overflow: scroll;" @scroll="onSysSetScroll">
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view id="section-basic-anchor" class="section-anchor"></view>
|
|
|
|
|
|
<view class="">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops" style="display: block;">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
运营区名称
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class=""
|
2026-04-28 14:01:46 +08:00
|
|
|
|
style="width: 100%;background: #F3F4F6;border-radius: 24rpx;margin-top: 18rpx;height: 88rpx;line-height: 88rpx;padding-left: 32rpx;box-sizing: border-box;transition: all 0.3s ease;border: 2rpx solid transparent;"
|
|
|
|
|
|
:style="{'border-color': focusName ? '#3B82F6' : 'transparent', 'background': focusName ? '#fff' : '#F3F4F6'}">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<input type="text" v-model="form.name" placeholder="运营区名称" class="input"
|
2026-04-28 14:01:46 +08:00
|
|
|
|
placeholder-style="color:#9CA3AF" style="height: 88rpx;line-height: 88rpx;font-size:32rpx;color:#1F2937;"
|
|
|
|
|
|
@focus="focusName=true" @blur="focusName=false">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-06-23 11:26:03 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<!-- 三级联动选择器 -->
|
|
|
|
|
|
<view class="xingzheng">
|
|
|
|
|
|
<view class="district-container">
|
|
|
|
|
|
<!-- 点击区域 -->
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" class="district-trigger" @tap="btnshowDistrict">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="district-label">行政区</view>
|
|
|
|
|
|
<view class="district-placeholder">
|
|
|
|
|
|
{{selectedText || '请选择'}}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<!-- 选择器弹窗 -->
|
|
|
|
|
|
<view class="district-picker" v-if="showDistrict">
|
|
|
|
|
|
<!-- 标题和操作按钮 -->
|
|
|
|
|
|
<view class="picker-header">
|
|
|
|
|
|
<view class="header-title">请点击选择</view>
|
|
|
|
|
|
<view class="header-actions">
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" class="header-btn cancel" @tap="handleCancel">取消</view>
|
|
|
|
|
|
<view hover-class="app-tap-hover" class="header-btn confirm" @tap="handleConfirm">确认</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 三级选择列 -->
|
|
|
|
|
|
<view class="picker-columns">
|
|
|
|
|
|
<!-- 省份列 -->
|
|
|
|
|
|
<scroll-view class="picker-column" scroll-y>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" v-for="item in provinceList" :key="item.id"
|
2026-01-15 14:40:00 +08:00
|
|
|
|
:class="['column-item', (tempProvince && tempProvince.id === item.id) ? 'active' : '']"
|
|
|
|
|
|
@tap="handleProvinceSelect(item)">
|
|
|
|
|
|
{{item.name}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 城市列 -->
|
|
|
|
|
|
<scroll-view class="picker-column" scroll-y>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" v-for="item in cityList" :key="item.id"
|
2026-01-15 14:40:00 +08:00
|
|
|
|
:class="['column-item', (tempCity && tempCity.id === item.id) ? 'active' : '']"
|
|
|
|
|
|
@tap="handleCitySelect(item)">
|
|
|
|
|
|
{{item.name}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 区县列 -->
|
|
|
|
|
|
<scroll-view class="picker-column" scroll-y>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" v-for="item in districtList" :key="item.id"
|
2026-01-15 14:40:00 +08:00
|
|
|
|
:class="['column-item', (tempDistrict && tempDistrict.id === item.id) ? 'active' : '']"
|
|
|
|
|
|
@tap="handleDistrictSelect(item)">
|
|
|
|
|
|
{{item.name}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-10 08:57:21 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card" style="padding-bottom: 50rpx;">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="biaoti">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
基础信息
|
2025-04-10 08:57:21 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
状态
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<u-switch v-model="timeflag"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tips">
|
|
|
|
|
|
关闭后用户将不能使用运营区及车辆
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-10 08:57:21 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
运营时间
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tips"
|
|
|
|
|
|
style="display: flex;justify-content: space-between;margin-top: 20rpx;align-items: center;background-color: #F4F5F7;padding: 28rpx;border-radius: 20rpx;text-align: center;">
|
|
|
|
|
|
<u-input :disabled="true" style="margin-right: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="startTime"
|
|
|
|
|
|
placeholder="如: 09:00:00" border="none" @click="showTimePicker('work')"></u-input> —
|
|
|
|
|
|
<u-input :disabled="true" style="margin-left: 10rpx;background-color: #E2E2E2;border-radius: 20rpx;text-align: center;overflow: hidden;" v-model="endTime"
|
|
|
|
|
|
placeholder="如: 18:00:00" border="none" @click="showTimePicker('off')"></u-input>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-16 09:14:52 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
实名认证
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<u-switch v-model="shimflag"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
开启后用户必须先进行实名认证才可使用
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-16 09:14:52 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="card_li card-inner-box" style="margin-top: 0;" v-if="shimflag == true">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
最低用车年龄
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<input type="number" v-model="form.minAge" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
用户年龄不满足最低年龄不可使用
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="card_li card-inner-box" v-if="shimflag == true">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
最高用车年龄
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<input type="number" v-model="form.maxAge" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
设置用户最高用车年龄,需配合实名认证使用;若无需校验,可设置为1000
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
驾驶证认证
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="jiasflag"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tips">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
开启后用户必须先通过驾驶证认证才可使用
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2026-05-25 17:13:15 +08:00
|
|
|
|
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
允许多订单
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="form.multipleOrder"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
开启后用户可以进行多个订单
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2026-05-25 17:13:15 +08:00
|
|
|
|
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
使用前上传视频
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="scspflag"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tips">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
开启后用户必须先拍摄全车视频才能下单
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
寻车范围
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<u-switch v-model="form.requiredRingRadius"></u-switch>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<!-- <view class="tops" style="margin-top: 20rpx;" v-if="form.requiredRingRadius == true">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
允许寻车范围
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tips" style="margin-top: 10rpx;">
|
|
|
|
|
|
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
|
|
|
|
|
</view> -->
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="card_li card-inner-box" v-if="form.requiredRingRadius == true">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
允许寻车范围
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<input type="number" v-model="form.ringRadius" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">米
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后,用户需在车辆指定范围才允许响铃寻车(防止恶意响铃)
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-02-06 15:28:01 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
启用引导
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.guideEnable"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后,用户首次扫码后会播放引导视频
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops" style="display: block;">
|
|
|
|
|
|
<view class="card_left" style="margin-bottom: 18rpx;">引导视频</view>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" class="guide-video-upload" @click="uploadGuideVideo">
|
2026-02-06 15:28:01 +08:00
|
|
|
|
<view v-if="!form.guideVideo" class="guide-video-placeholder">
|
|
|
|
|
|
<text class="guide-video-plus">+</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view v-else class="guide-video-preview">
|
|
|
|
|
|
<video :src="form.guideVideo" class="guide-video-preview-video" controls></video>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view hover-class="app-tap-hover" class="guide-video-remove" @click.stop="removeGuideVideo">
|
2026-02-06 15:28:01 +08:00
|
|
|
|
<text>删除</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view id="section-ride-anchor" class="section-anchor"></view>
|
|
|
|
|
|
<view class="">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
|
<view class="biaoti">
|
|
|
|
|
|
骑行设置
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
低于电量(%)不得骑行
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<input type="number" v-model="form.undercharge" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">%
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips" style="text-align: left;">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
当车辆电量低于多少时无法解锁用车
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
允许换车
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="form.enableChange"></u-switch>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后当进入禁行区内将进行断电
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-05-25 17:13:15 +08:00
|
|
|
|
<view class="card_li" v-if="form.enableChange">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
换车校验位置
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.changeCheck"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后用户换车是否需要校验位置
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
禁行区内断电
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.noRidingOutage"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后当进入禁行区内将进行断电
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
运营区域外断电
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="form.areaOutOutage"></u-switch>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
开启后当进入运营区域外内将进行断电
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
运营区外断电距离
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<input type="number" v-model="form.outageDistance" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
运营区外断电距离(米)
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
|
|
|
|
|
|
<view class="card_li">
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
靠近边界播报距离
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<input type="number" v-model="form.boundaryDistance" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
靠近边界播报距离(米)
|
|
|
|
|
|
</view>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<view class="card_li">
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
临时开锁
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<u-switch v-model="form.enableTempUnlock"></u-switch>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后,车辆强制锁车时,用户可临时开锁后骑回运营区
|
|
|
|
|
|
</view>
|
2026-04-02 01:48:12 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="card_li card-inner-box" style="margin-top: 0;" v-if="form.enableTempUnlock == true">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
最大临时开锁次数
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<input type="number" v-model="form.tempUnlockMax" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">次
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<view class="card_li card-inner-box" v-if="form.enableTempUnlock == true">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
每次临时开锁时长
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
<input type="number" v-model="form.tempUnlockSeconds" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 80rpx;background-color: #E2E2E2;text-align: center;padding: 0;">秒
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
2026-04-02 01:48:12 +08:00
|
|
|
|
<view id="section-return-anchor" class="section-anchor"></view>
|
|
|
|
|
|
<view class="">
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
|
<view class="biaoti">
|
|
|
|
|
|
还车设置
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-05-25 17:13:15 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
手机校验附近设备
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.mobileCheckMac"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后,用户还车时会校验手机附近设备,若不匹配则视为无效定位,可以降低异地还车的风险
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
2026-04-28 14:01:46 +08:00
|
|
|
|
还车误差
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="number" v-model="form.error" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">米
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
允许用户在规划的停车点外多少米还车
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
还车拍照审核
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.returnVerify"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后则需用户拍摄视频后审核订单方可退还押金
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
强制停车点还车
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.parkingReturn"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启则必须在停车点才可还车,停车点存在误差
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li" v-if="form.parkingReturn == false">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
运营区外还车
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="form.areaOutReturn"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips">
|
|
|
|
|
|
开启后可以在运营区范围外还车
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
运营区外管理费
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="number" v-model="form.vehicleManagementFee" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
设置车辆超出运营区外产生的管理费用
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
停车点外调度费
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="number" v-model="form.dispatchFee" placeholder=" " class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" style="width: 100rpx;">元
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
设置车辆超出停车点外产生的调度费用
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-04-28 14:01:46 +08:00
|
|
|
|
|
2026-01-15 14:40:00 +08:00
|
|
|
|
<!-- <view class="card_li" @click="toMap()">
|
|
|
|
|
|
<view class="tops">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
电子围栏设置
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<view class="iconfont icon-xiangyou1">
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="tips" style="text-align: left;">
|
|
|
|
|
|
设置车辆可以正常行驶的区域
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view> -->
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<!-- 底部留白:避免最后一项被固定操作栏遮挡 -->
|
|
|
|
|
|
<view class="scroll-bottom-spacer"></view>
|
2026-01-15 14:40:00 +08:00
|
|
|
|
</scroll-view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 时间选择器 -->
|
|
|
|
|
|
<u-picker v-model="showTimeSelect" mode="time" @confirm="timeConfirm" :params="params"
|
2026-04-02 01:48:12 +08:00
|
|
|
|
default-time="00:00:00"></u-picker>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="btn_box">
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view class="btn1" hover-class="btn1-press app-tap-hover" hover-stay-time="100" @click="backpage()">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
取消
|
|
|
|
|
|
</view>
|
2026-05-21 09:43:14 +08:00
|
|
|
|
<view class="btn2" :class="{ 'btn2--disabled': submitting }" hover-class="btn2-press app-tap-hover" hover-stay-time="100"
|
|
|
|
|
|
@click="sub">
|
|
|
|
|
|
{{ submitting ? '保存中…' : '保存' }}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-05-25 17:13:15 +08:00
|
|
|
|
<qiniu-upload-progress />
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
focusName: false,
|
2025-04-01 21:35:30 +08:00
|
|
|
|
bgc: {
|
|
|
|
|
|
backgroundColor: "#fff",
|
|
|
|
|
|
},
|
|
|
|
|
|
list: [],
|
2025-06-06 16:53:36 +08:00
|
|
|
|
form: {},
|
2025-04-01 21:35:30 +08:00
|
|
|
|
deptInfo: {},
|
|
|
|
|
|
areaId: '',
|
2025-04-16 09:14:52 +08:00
|
|
|
|
customServices: [],
|
|
|
|
|
|
params: {
|
|
|
|
|
|
year: false,
|
|
|
|
|
|
month: false,
|
|
|
|
|
|
day: false,
|
|
|
|
|
|
hour: true,
|
|
|
|
|
|
minute: true,
|
|
|
|
|
|
second: true
|
|
|
|
|
|
},
|
|
|
|
|
|
showTimeSelect: false,
|
|
|
|
|
|
timeType: "work", // work or off
|
2025-12-20 14:29:10 +08:00
|
|
|
|
startTime: '',
|
|
|
|
|
|
endTime: '',
|
|
|
|
|
|
timeflag: false,
|
|
|
|
|
|
shimflag: false,
|
|
|
|
|
|
jiasflag: false,
|
|
|
|
|
|
scspflag: false,
|
|
|
|
|
|
|
|
|
|
|
|
// 行政区划数据
|
|
|
|
|
|
regionData: [],
|
|
|
|
|
|
provinceList: [],
|
|
|
|
|
|
cityList: [],
|
|
|
|
|
|
districtList: [],
|
|
|
|
|
|
|
|
|
|
|
|
// 已选择的数据(确认后保存)
|
|
|
|
|
|
selectedProvince: null,
|
|
|
|
|
|
selectedCity: null,
|
|
|
|
|
|
selectedDistrict: null,
|
|
|
|
|
|
|
|
|
|
|
|
// 临时选择的数据(选择器中使用)
|
|
|
|
|
|
tempProvince: null,
|
|
|
|
|
|
tempCity: null,
|
|
|
|
|
|
tempDistrict: null,
|
|
|
|
|
|
|
|
|
|
|
|
// 控制选择器显示
|
|
|
|
|
|
showDistrict: false,
|
|
|
|
|
|
selectedText: '请选择',
|
2026-02-06 15:28:01 +08:00
|
|
|
|
tabindex: 0,
|
2026-04-02 01:48:12 +08:00
|
|
|
|
qiniuToken: '',
|
|
|
|
|
|
navOffsetTop: 88,
|
2026-04-28 14:01:46 +08:00
|
|
|
|
scrollIntoView: '',
|
|
|
|
|
|
/** 相对「基础信息」锚点的 scrollTop 阈值 [0, 骑行, 还车],单位 px */
|
|
|
|
|
|
sectionScrollThresholds: null,
|
|
|
|
|
|
/** scroll-view 可视高度,用于触底时高亮最后一个 tab */
|
|
|
|
|
|
mainScrollViewportHeight: 0,
|
|
|
|
|
|
/** 点击 tab 程序化滚动期间,避免 scroll 回调把高亮改乱 */
|
2026-05-21 09:43:14 +08:00
|
|
|
|
scrollSpyFromTab: false,
|
|
|
|
|
|
submitting: false,
|
|
|
|
|
|
/** 滚动联动节流,减轻频繁 setData */
|
|
|
|
|
|
_scrollSpyTs: 0
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad(e) {
|
2026-04-02 01:48:12 +08:00
|
|
|
|
const sysInfo = uni.getSystemInfoSync()
|
|
|
|
|
|
this.navOffsetTop = (sysInfo.statusBarHeight || 20) + 44
|
2026-04-28 14:01:46 +08:00
|
|
|
|
// 72vh 近似高度,供触底判断;onReady 会用实测值覆盖
|
|
|
|
|
|
this.mainScrollViewportHeight = Math.round((sysInfo.windowHeight || 667) * 0.72)
|
|
|
|
|
|
},
|
|
|
|
|
|
onReady() {
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
const q = uni.createSelectorQuery().in(this)
|
|
|
|
|
|
q.select('.sys-set-scroll').boundingClientRect()
|
|
|
|
|
|
q.exec((res) => {
|
|
|
|
|
|
if (res && res[0] && res[0].height) this.mainScrollViewportHeight = res[0].height
|
|
|
|
|
|
})
|
|
|
|
|
|
this.measureSectionScrollThresholds()
|
|
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
if (uni.getStorageSync('adminAreaid')) {
|
|
|
|
|
|
this.areaId = uni.getStorageSync('adminAreaid')
|
|
|
|
|
|
}
|
|
|
|
|
|
this.getAreaInfo()
|
2025-12-20 14:29:10 +08:00
|
|
|
|
this.getxingzhen()
|
2026-02-06 15:28:01 +08:00
|
|
|
|
this.getQiniuToken()
|
2025-12-20 14:29:10 +08:00
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
// 计算已选择的文本显示
|
|
|
|
|
|
// selectedText() {
|
|
|
|
|
|
// if (!this.selectedProvince) return '';
|
|
|
|
|
|
// let text = this.selectedProvince.name;
|
|
|
|
|
|
// if (this.selectedCity) text += this.selectedCity.name;
|
|
|
|
|
|
// if (this.selectedDistrict) text += this.selectedDistrict.name;
|
|
|
|
|
|
|
|
|
|
|
|
// return text;
|
|
|
|
|
|
// }
|
2025-04-01 21:35:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
// 测量各区块锚点间距(与当前滚动位置无关,差值即内容区相对偏移)
|
|
|
|
|
|
measureSectionScrollThresholds() {
|
|
|
|
|
|
const q = uni.createSelectorQuery().in(this)
|
|
|
|
|
|
q.select('#section-basic-anchor').boundingClientRect()
|
|
|
|
|
|
q.select('#section-ride-anchor').boundingClientRect()
|
|
|
|
|
|
q.select('#section-return-anchor').boundingClientRect()
|
|
|
|
|
|
q.exec((res) => {
|
|
|
|
|
|
if (!res || !res[0] || !res[1] || !res[2]) return
|
|
|
|
|
|
const d1 = res[1].top - res[0].top
|
|
|
|
|
|
const d2 = res[2].top - res[0].top
|
|
|
|
|
|
if (!(d1 > 0 && d2 > d1)) return
|
|
|
|
|
|
this.sectionScrollThresholds = [0, d1, d2]
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onSysSetScroll(e) {
|
|
|
|
|
|
if (this.scrollSpyFromTab) return
|
2026-05-21 09:43:14 +08:00
|
|
|
|
const now = Date.now()
|
|
|
|
|
|
if (now - this._scrollSpyTs < 40) return
|
|
|
|
|
|
this._scrollSpyTs = now
|
2026-04-28 14:01:46 +08:00
|
|
|
|
const detail = e.detail || {}
|
|
|
|
|
|
const st = detail.scrollTop || 0
|
|
|
|
|
|
const sh = detail.scrollHeight || 0
|
|
|
|
|
|
const vh = this.mainScrollViewportHeight || 0
|
|
|
|
|
|
const th = this.sectionScrollThresholds
|
|
|
|
|
|
const leeway = uni.upx2px ? uni.upx2px(16) : 8
|
|
|
|
|
|
let idx = 0
|
|
|
|
|
|
if (th && th.length >= 3) {
|
|
|
|
|
|
if (sh > 0 && vh > 0 && st + vh >= sh - leeway * 2) {
|
|
|
|
|
|
idx = 2
|
|
|
|
|
|
} else if (st + leeway >= th[2]) {
|
|
|
|
|
|
idx = 2
|
|
|
|
|
|
} else if (st + leeway >= th[1]) {
|
|
|
|
|
|
idx = 1
|
|
|
|
|
|
} else {
|
|
|
|
|
|
idx = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (idx !== this.tabindex) {
|
|
|
|
|
|
this.tabindex = idx
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// 点击头部tab进行切换
|
|
|
|
|
|
btntab(num) {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
this.scrollSpyFromTab = true
|
2025-12-20 14:29:10 +08:00
|
|
|
|
this.tabindex = num
|
2026-04-02 01:48:12 +08:00
|
|
|
|
const anchorMap = {
|
|
|
|
|
|
0: 'section-basic-anchor',
|
|
|
|
|
|
1: 'section-ride-anchor',
|
|
|
|
|
|
2: 'section-return-anchor'
|
|
|
|
|
|
}
|
|
|
|
|
|
this.scrollIntoView = ''
|
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
this.scrollIntoView = anchorMap[num]
|
2026-04-28 14:01:46 +08:00
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
this.scrollSpyFromTab = false
|
|
|
|
|
|
this.measureSectionScrollThresholds()
|
|
|
|
|
|
}, 420)
|
2026-04-02 01:48:12 +08:00
|
|
|
|
})
|
2025-12-20 14:29:10 +08:00
|
|
|
|
},
|
|
|
|
|
|
btnshowDistrict() {
|
|
|
|
|
|
this.showDistrict = !this.showDistrict
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取所有行政区
|
|
|
|
|
|
getxingzhen() {
|
|
|
|
|
|
this.$u.get(`/bst/region/all`).then(res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.regionData = res.data;
|
|
|
|
|
|
// 初始化省份列表
|
|
|
|
|
|
this.provinceList = this.regionData.filter(item => item.level === 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择省份
|
|
|
|
|
|
handleProvinceSelect(item) {
|
|
|
|
|
|
this.tempProvince = item
|
|
|
|
|
|
// 获取该省份下的城市
|
|
|
|
|
|
this.cityList = this.regionData.filter(city =>
|
|
|
|
|
|
city.level === 2 && city.parentId === item.id
|
|
|
|
|
|
)
|
|
|
|
|
|
// 清空已选择的城市和区县
|
|
|
|
|
|
this.tempCity = null
|
|
|
|
|
|
this.tempDistrict = null
|
|
|
|
|
|
this.districtList = []
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择城市
|
|
|
|
|
|
handleCitySelect(item) {
|
|
|
|
|
|
this.tempCity = item;
|
|
|
|
|
|
// 获取该城市下的区县
|
|
|
|
|
|
this.districtList = this.regionData.filter(district =>
|
|
|
|
|
|
district.level === 3 && district.parentId === item.id
|
|
|
|
|
|
);
|
|
|
|
|
|
// 清空已选择的区县
|
|
|
|
|
|
this.tempDistrict = null;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 选择区县
|
|
|
|
|
|
handleDistrictSelect(item) {
|
|
|
|
|
|
this.tempDistrict = item;
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 取消选择
|
|
|
|
|
|
handleCancel() {
|
|
|
|
|
|
// 重置临时选择
|
|
|
|
|
|
this.tempProvince = this.selectedProvince;
|
|
|
|
|
|
this.tempCity = this.selectedCity;
|
|
|
|
|
|
this.tempDistrict = this.selectedDistrict;
|
|
|
|
|
|
// 如果之前选择了省份,需要重新加载城市列表
|
|
|
|
|
|
if (this.tempProvince) {
|
|
|
|
|
|
this.cityList = this.regionData.filter(city =>
|
|
|
|
|
|
city.level === 2 && city.parentId === this.tempProvince.id
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
// 如果之前选择了城市,需要重新加载区县列表
|
|
|
|
|
|
if (this.tempCity) {
|
|
|
|
|
|
this.districtList = this.regionData.filter(district =>
|
|
|
|
|
|
district.level === 3 && district.parentId === this.tempCity.id
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
this.showDistrict = false
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 确认选择
|
|
|
|
|
|
handleConfirm() {
|
|
|
|
|
|
// 保存临时选择到最终选择
|
|
|
|
|
|
this.selectedProvince = this.tempProvince
|
|
|
|
|
|
this.selectedCity = this.tempCity
|
|
|
|
|
|
this.selectedDistrict = this.tempDistrict
|
|
|
|
|
|
if (this.selectedProvince) {
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请选择省/自治区',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (this.selectedCity) {
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请选择市',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
// 保存到表单
|
|
|
|
|
|
if (this.selectedDistrict) {
|
|
|
|
|
|
this.form.districtId = this.selectedDistrict.id
|
|
|
|
|
|
this.form.districtName = this.selectedDistrict.name
|
|
|
|
|
|
this.form.provinceId = this.selectedProvince.id
|
|
|
|
|
|
this.form.provinceName = this.selectedProvince.name
|
|
|
|
|
|
this.form.cityId = this.selectedCity.id
|
|
|
|
|
|
this.form.cityName = this.selectedCity.name
|
|
|
|
|
|
this.form.regionId = this.selectedDistrict.id
|
|
|
|
|
|
this.selectedText = this.form.provinceName + ',' + this.form.cityName + ',' + this.form.districtName
|
|
|
|
|
|
// 收起选择器
|
|
|
|
|
|
this.showDistrict = !this.showDistrict
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请选择区',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-04-16 09:14:52 +08:00
|
|
|
|
// 显示时间选择器
|
|
|
|
|
|
showTimePicker(type) {
|
|
|
|
|
|
this.timeType = type
|
|
|
|
|
|
this.showTimeSelect = true
|
|
|
|
|
|
},
|
|
|
|
|
|
// 时间选择确认
|
|
|
|
|
|
timeConfirm(e) {
|
|
|
|
|
|
const time = `${e.hour}:${e.minute}:${e.second}`
|
|
|
|
|
|
if (this.timeType === 'work') {
|
|
|
|
|
|
this.startTime = time
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.endTime = time
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-12-20 14:29:10 +08:00
|
|
|
|
toMap() {
|
2025-04-01 21:35:30 +08:00
|
|
|
|
uni.navigateTo({
|
2025-12-20 14:29:10 +08:00
|
|
|
|
url: '/page_shanghu/guanli/msp_set?areaId=' + this.areaId
|
2025-04-01 21:35:30 +08:00
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
addService() {
|
|
|
|
|
|
if (this.customServices.length < 3) {
|
|
|
|
|
|
this.customServices.push({
|
|
|
|
|
|
name: "",
|
|
|
|
|
|
phone: ""
|
2025-06-06 16:53:36 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
removeService(index) {
|
|
|
|
|
|
if (index > 0 && this.customServices.length > 1) {
|
|
|
|
|
|
this.$delete(this.customServices, index);
|
2025-06-06 16:53:36 +08:00
|
|
|
|
this.$set(this.form, `serviceName${index + 1}`, "")
|
|
|
|
|
|
this.$set(this.form, `servicePhone${index + 1}`, "")
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
getAreaInfo() {
|
|
|
|
|
|
this.$u.get(`/bst/area/${this.areaId}`).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.form = res.data
|
2026-04-02 01:48:12 +08:00
|
|
|
|
this.$set(this.form, 'enableTempUnlock', res.data.enableTempUnlock === true)
|
|
|
|
|
|
this.$set(this.form, 'tempUnlockMax', Number.isInteger(res.data.tempUnlockMax) ? res.data.tempUnlockMax : 0)
|
|
|
|
|
|
this.$set(this.form, 'tempUnlockSeconds', Number.isInteger(res.data.tempUnlockSeconds) ? res.data.tempUnlockSeconds : 0)
|
2026-02-06 15:28:01 +08:00
|
|
|
|
this.$set(this.form, 'guideEnable', res.data.guideEnable === true)
|
|
|
|
|
|
this.$set(this.form, 'guideVideo', res.data.guideVideo || '')
|
2025-04-01 21:35:30 +08:00
|
|
|
|
this.form.ruleIds = res.ruleIds
|
2025-12-20 14:29:10 +08:00
|
|
|
|
if (res.data.regionMergerName != null) {
|
|
|
|
|
|
this.selectedText = res.data.regionMergerName
|
|
|
|
|
|
}
|
2025-04-16 09:14:52 +08:00
|
|
|
|
this.startTime = res.data.areaTimeStart
|
|
|
|
|
|
this.endTime = res.data.areaTimeEnd
|
2025-06-07 17:46:48 +08:00
|
|
|
|
this.scspflag = res.data.needCheckVideo
|
2025-12-20 14:29:10 +08:00
|
|
|
|
if (res.data.status == 1) {
|
2025-04-16 09:14:52 +08:00
|
|
|
|
this.timeflag = false
|
2025-12-20 14:29:10 +08:00
|
|
|
|
} else if (res.data.status == 0) {
|
2025-04-16 09:14:52 +08:00
|
|
|
|
this.timeflag = 1
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
// 初始化 customServices 数组
|
|
|
|
|
|
this.customServices = [];
|
|
|
|
|
|
for (let i = 1; i <= 3; i++) {
|
|
|
|
|
|
if (
|
|
|
|
|
|
res.data[`serviceName${i}`] ||
|
|
|
|
|
|
res.data[`servicePhone${i}`]
|
|
|
|
|
|
) {
|
|
|
|
|
|
this.customServices.push({
|
|
|
|
|
|
name: res.data[`serviceName${i}`] || "",
|
|
|
|
|
|
phone: res.data[`servicePhone${i}`] || "",
|
2025-06-06 16:53:36 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 如果 customServices 为空,添加一个默认的服务
|
|
|
|
|
|
if (this.customServices.length === 0) {
|
|
|
|
|
|
this.customServices.push({
|
|
|
|
|
|
name: "",
|
|
|
|
|
|
phone: ""
|
2025-06-06 16:53:36 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
2026-04-28 14:01:46 +08:00
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
|
setTimeout(() => this.measureSectionScrollThresholds(), 50)
|
|
|
|
|
|
setTimeout(() => this.measureSectionScrollThresholds(), 300)
|
|
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
2025-06-06 16:53:36 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
2026-02-06 15:28:01 +08:00
|
|
|
|
getQiniuToken() {
|
|
|
|
|
|
this.$u.get("/common/qiniuToken").then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.qiniuToken = res.data
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
uploadGuideVideo() {
|
|
|
|
|
|
if (!this.qiniuToken) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '上传token获取失败,请重试',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
uni.chooseVideo({
|
|
|
|
|
|
sourceType: ['album', 'camera'],
|
|
|
|
|
|
maxDuration: 60,
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
this._uploadGuideVideoToQiniu(res.tempFilePath)
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
console.log('选择视频失败', err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
_uploadGuideVideoToQiniu(filePath) {
|
|
|
|
|
|
let _this = this
|
|
|
|
|
|
let math = 'static/' + _this.$u.guid(20) + '.mp4'
|
2026-05-25 17:13:15 +08:00
|
|
|
|
_this.$uploadQiniuFile({
|
|
|
|
|
|
filePath,
|
|
|
|
|
|
token: _this.qiniuToken,
|
|
|
|
|
|
key: 'bike/video/' + math,
|
|
|
|
|
|
title: '上传引导视频'
|
|
|
|
|
|
}).then((url) => {
|
|
|
|
|
|
_this.$set(_this.form, 'guideVideo', url)
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '上传成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
}).catch(() => {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '上传失败',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
2026-02-06 15:28:01 +08:00
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
removeGuideVideo() {
|
|
|
|
|
|
this.$set(this.form, 'guideVideo', '')
|
|
|
|
|
|
},
|
2025-04-01 21:35:30 +08:00
|
|
|
|
backpage() {
|
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
|
},
|
|
|
|
|
|
// 选中任一radio时,由radio-group触发
|
|
|
|
|
|
radioGroupChange(e) {
|
2025-06-06 16:53:36 +08:00
|
|
|
|
console.log(e)
|
2025-04-01 21:35:30 +08:00
|
|
|
|
if (e == '按分钟') {
|
|
|
|
|
|
this.data.rentalUnit = 'minutes'
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.data.rentalUnit = 'hours'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
sub() {
|
2026-05-21 09:43:14 +08:00
|
|
|
|
if (this.submitting) return
|
2026-04-02 01:48:12 +08:00
|
|
|
|
if (this.form.enableTempUnlock === true) {
|
|
|
|
|
|
const tempUnlockMax = Number(this.form.tempUnlockMax)
|
|
|
|
|
|
const tempUnlockSeconds = Number(this.form.tempUnlockSeconds)
|
|
|
|
|
|
if (!Number.isInteger(tempUnlockMax) || tempUnlockMax < 0) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '最大临时开锁次数需为大于等于0的整数',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!Number.isInteger(tempUnlockSeconds) || tempUnlockSeconds < 0) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '每次临时开锁时长需为大于等于0的整数',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1500
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
let data = {
|
2025-04-16 09:14:52 +08:00
|
|
|
|
...this.form,
|
2025-12-20 14:29:10 +08:00
|
|
|
|
areaTimeStart: this.startTime,
|
|
|
|
|
|
areaTimeEnd: this.endTime,
|
|
|
|
|
|
status: this.timeflag == true ? '0' : '1',
|
2026-02-06 15:28:01 +08:00
|
|
|
|
needCheckVideo: this.scspflag,
|
2026-04-02 01:48:12 +08:00
|
|
|
|
enableTempUnlock: this.form.enableTempUnlock === true,
|
|
|
|
|
|
tempUnlockMax: Number(this.form.tempUnlockMax || 0),
|
|
|
|
|
|
tempUnlockSeconds: Number(this.form.tempUnlockSeconds || 0),
|
2026-02-06 15:28:01 +08:00
|
|
|
|
guideEnable: this.form.guideEnable === true,
|
|
|
|
|
|
guideVideo: this.form.guideVideo || ''
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
this.submitting = true
|
|
|
|
|
|
uni.showLoading({
|
|
|
|
|
|
title: '保存中…',
|
|
|
|
|
|
mask: true
|
|
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
this.$u.put(`/bst/area`, data).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
uni.showToast({
|
2025-04-10 08:57:21 +08:00
|
|
|
|
title: '保存成功',
|
2025-04-01 21:35:30 +08:00
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 1000
|
2025-06-06 16:53:36 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
|
}, 1100)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 1000
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
}).catch(() => {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '网络异常,请稍后重试',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000
|
|
|
|
|
|
})
|
|
|
|
|
|
}).finally(() => {
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
this.submitting = false
|
2025-04-01 21:35:30 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
::v-deep .u-input__input{
|
|
|
|
|
|
text-align: center !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
.tabactive {
|
|
|
|
|
|
font-weight: 600 !important;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #3B82F6 !important;
|
|
|
|
|
|
font-size: 34rpx !important;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
text {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: linear-gradient(135deg, #60A5FA 0%, #3B82F6 100%) !important;
|
|
|
|
|
|
border-radius: 4rpx !important;
|
|
|
|
|
|
box-shadow: 0 4rpx 10rpx rgba(59, 130, 246, 0.4);
|
2025-12-20 14:29:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tab {
|
2026-04-02 01:48:12 +08:00
|
|
|
|
position: fixed;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
right: 0;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 750rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
height: 100rpx;
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
border-radius: 0 0 32rpx 32rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
padding: 0 20rpx;
|
|
|
|
|
|
font-size: 32rpx;
|
2026-04-02 01:48:12 +08:00
|
|
|
|
z-index: 99;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.05);
|
2025-12-20 14:29:10 +08:00
|
|
|
|
view {
|
|
|
|
|
|
text-align: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #6B7280;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
padding: 20rpx 0;
|
2026-05-21 09:43:14 +08:00
|
|
|
|
|
2025-12-20 14:29:10 +08:00
|
|
|
|
text {
|
|
|
|
|
|
display: block;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
width: 48rpx;
|
|
|
|
|
|
height: 8rpx;
|
|
|
|
|
|
border-radius: 4rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
margin: auto;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
margin-top: 12rpx;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
background: transparent;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
.tab-item-press {
|
|
|
|
|
|
opacity: 0.82;
|
|
|
|
|
|
}
|
2026-04-02 01:48:12 +08:00
|
|
|
|
.tab-placeholder {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
height: 100rpx;
|
2026-04-02 01:48:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
.section-anchor {
|
|
|
|
|
|
height: 4rpx;
|
|
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
.scroll-bottom-spacer {
|
|
|
|
|
|
height: 280rpx;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
2026-04-28 14:01:46 +08:00
|
|
|
|
page {
|
|
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
2025-12-20 14:29:10 +08:00
|
|
|
|
.xingzheng {
|
|
|
|
|
|
padding: 0 24rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.district-container {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
border-radius: 32rpx;
|
|
|
|
|
|
margin-top: 24rpx;
|
|
|
|
|
|
box-shadow: 0 12rpx 36rpx rgba(44, 138, 240, 0.06);
|
|
|
|
|
|
border: 1rpx solid rgba(255, 255, 255, 0.8);
|
2025-12-20 14:29:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.district-trigger {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
height: 110rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 0 32rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.district-label {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #1F2937;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.district-placeholder {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #6B7280;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
&:after {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
width: 12rpx;
|
|
|
|
|
|
height: 12rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
border: 3rpx solid #9CA3AF;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
border-left: none;
|
|
|
|
|
|
border-top: none;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
transform: rotate(45deg);
|
|
|
|
|
|
margin-left: 12rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
transition: all 0.3s;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.district-picker {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
border-radius: 0 0 12rpx 12rpx;
|
|
|
|
|
|
margin-top: -1rpx;
|
|
|
|
|
|
z-index: 10;
|
|
|
|
|
|
box-shadow: 0rpx 4rpx 20rpx rgba(0, 0, 0, 0.1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.picker-header {
|
|
|
|
|
|
height: 100rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 0 32rpx;
|
|
|
|
|
|
border-bottom: 1rpx solid #F0F0F0;
|
|
|
|
|
|
|
|
|
|
|
|
.header-title {
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.header-actions {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
gap: 40rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.header-btn {
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
line-height: 40rpx;
|
|
|
|
|
|
|
|
|
|
|
|
&.cancel {
|
|
|
|
|
|
color: #999;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&.confirm {
|
|
|
|
|
|
color: #4C97E7;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.picker-columns {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
height: 500rpx;
|
|
|
|
|
|
border-top: 1rpx solid #F8F8F8;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.picker-column {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
border-right: 1rpx solid #F0F0F0;
|
|
|
|
|
|
|
|
|
|
|
|
&:last-child {
|
|
|
|
|
|
border-right: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.column-item {
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
padding: 0 20rpx;
|
|
|
|
|
|
border-bottom: 1rpx solid #F8F8F8;
|
|
|
|
|
|
|
|
|
|
|
|
&.active {
|
|
|
|
|
|
background: #F5F8FF;
|
|
|
|
|
|
color: #4C97E7;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
|
|
&:after {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
width: 4rpx;
|
|
|
|
|
|
background: #4C97E7;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.selected-display {
|
|
|
|
|
|
padding: 20rpx 0;
|
|
|
|
|
|
|
|
|
|
|
|
.selected-label {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #666;
|
|
|
|
|
|
margin-bottom: 16rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.selected-tags {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
gap: 16rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.selected-tag {
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
background: #F0F8FF;
|
|
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
padding: 6rpx 16rpx;
|
|
|
|
|
|
padding-right: 8rpx;
|
|
|
|
|
|
border: 1rpx solid #D6E7FF;
|
|
|
|
|
|
|
|
|
|
|
|
.tag-text {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #4C97E7;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
line-height: 34rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.close-icon {
|
|
|
|
|
|
width: 24rpx;
|
|
|
|
|
|
height: 24rpx;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
background: #E5E5E5;
|
|
|
|
|
|
color: #666;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 20rpx;
|
|
|
|
|
|
margin-left: 8rpx;
|
|
|
|
|
|
line-height: 1;
|
|
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
background: #D5D5D5;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.card {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 0 32rpx;
|
|
|
|
|
|
margin: 30rpx auto 0;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 702rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
border-radius: 32rpx;
|
|
|
|
|
|
box-shadow: 0 12rpx 36rpx rgba(44, 138, 240, 0.06);
|
|
|
|
|
|
border: 1rpx solid rgba(255, 255, 255, 0.8);
|
|
|
|
|
|
box-sizing: border-box;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
|
|
|
|
|
.card_li {
|
|
|
|
|
|
width: 100%;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 40rpx 0;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
position: relative;
|
|
|
|
|
|
&:not(:last-child)::after {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 1rpx;
|
|
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
|
|
|
|
|
.tops {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.card_left {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #1F2937;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.card_right {
|
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.input {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-size: 30rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #374151;
|
|
|
|
|
|
min-width: 160rpx;
|
|
|
|
|
|
height: 72rpx;
|
|
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
border-radius: 36rpx;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:focus {
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
border: 2rpx solid #3B82F6;
|
|
|
|
|
|
box-shadow: 0 0 0 4rpx rgba(59, 130, 246, 0.1);
|
|
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tips {
|
|
|
|
|
|
width: 100%;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #9CA3AF;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
margin-top: 16rpx;
|
|
|
|
|
|
line-height: 1.6;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.page {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
.card-inner-box {
|
|
|
|
|
|
background: #F8FAFC;
|
|
|
|
|
|
border-radius: 24rpx;
|
|
|
|
|
|
padding: 24rpx 32rpx;
|
|
|
|
|
|
margin-top: 24rpx;
|
|
|
|
|
|
border: 1rpx solid #F1F5F9;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.choose_part {
|
|
|
|
|
|
position: fixed;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
top: 50%;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
2025-04-01 21:35:30 +08:00
|
|
|
|
z-index: 110;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
width: 686rpx;
|
|
|
|
|
|
padding: 48rpx;
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
border-radius: 40rpx;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15);
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
.part_box {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
margin-top: 48rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
gap: 24rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
.part {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 12rpx 24rpx;
|
|
|
|
|
|
background: #F8FAFC;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
border: 2rpx solid #E2E8F0;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #4B5563;
|
|
|
|
|
|
transition: all 0.3s ease;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
image {
|
|
|
|
|
|
position: absolute;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
right: -2rpx;
|
|
|
|
|
|
bottom: -2rpx;
|
|
|
|
|
|
width: 40rpx;
|
|
|
|
|
|
height: 40rpx;
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
transform: scale(0.5);
|
|
|
|
|
|
transition: all 0.3s ease;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.act {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: #EFF6FF;
|
|
|
|
|
|
border: 2rpx solid #3B82F6;
|
|
|
|
|
|
color: #3B82F6;
|
|
|
|
|
|
box-shadow: 0 4rpx 12rpx rgba(59, 130, 246, 0.15);
|
|
|
|
|
|
image {
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: scale(1);
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tit {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 36rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #1F2937;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
margin-top: 60rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 96rpx;
|
|
|
|
|
|
background: linear-gradient(135deg, #60A5FA 0%, #3B82F6 100%);
|
|
|
|
|
|
border-radius: 48rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
box-shadow: 0 8rpx 24rpx rgba(59, 130, 246, 0.25);
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.98);
|
|
|
|
|
|
box-shadow: 0 4rpx 12rpx rgba(59, 130, 246, 0.2);
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.btn_box {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
width: 750rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
bottom: 0;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-content: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
z-index: 100;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
padding: 30rpx;
|
2026-05-21 09:43:14 +08:00
|
|
|
|
padding-bottom: calc(40rpx + constant(safe-area-inset-bottom));
|
|
|
|
|
|
padding-bottom: calc(40rpx + env(safe-area-inset-bottom));
|
2026-04-28 14:01:46 +08:00
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
box-shadow: 0 -10rpx 30rpx rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.btn1 {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
margin-right: 32rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: #F8FAFC;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
width: 260rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
height: 96rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
border-radius: 48rpx;
|
|
|
|
|
|
border: 2rpx solid #E2E8F0;
|
|
|
|
|
|
font-size: 34rpx;
|
|
|
|
|
|
color: #4B5563;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.95);
|
|
|
|
|
|
background: #F1F5F9;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
.btn1-press {
|
|
|
|
|
|
transform: scale(0.96);
|
|
|
|
|
|
background: #F1F5F9;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
.btn2 {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 36rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
color: #FFFFFF;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
width: 400rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
height: 96rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: linear-gradient(135deg, #60A5FA 0%, #3B82F6 100%);
|
|
|
|
|
|
border-radius: 48rpx;
|
|
|
|
|
|
box-shadow: 0 8rpx 24rpx rgba(59, 130, 246, 0.25);
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.98);
|
|
|
|
|
|
box-shadow: 0 4rpx 12rpx rgba(59, 130, 246, 0.2);
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
2026-05-21 09:43:14 +08:00
|
|
|
|
.btn2-press:not(.btn2--disabled) {
|
|
|
|
|
|
transform: scale(0.97);
|
|
|
|
|
|
opacity: 0.95;
|
|
|
|
|
|
}
|
|
|
|
|
|
.btn2--disabled {
|
|
|
|
|
|
opacity: 0.65;
|
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.card {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 0 32rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
margin: 0 auto;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
margin-top: 30rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 702rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: rgba(255, 255, 255, 0.98);
|
|
|
|
|
|
backdrop-filter: blur(10px);
|
|
|
|
|
|
border-radius: 32rpx;
|
|
|
|
|
|
box-shadow: 0 12rpx 36rpx rgba(44, 138, 240, 0.06);
|
|
|
|
|
|
border: 1rpx solid rgba(255, 255, 255, 0.8);
|
|
|
|
|
|
box-sizing: border-box;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
|
|
|
|
|
.biaoti {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-size: 34rpx;
|
2025-04-16 09:14:52 +08:00
|
|
|
|
font-weight: 600;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding-top: 40rpx;
|
2025-04-16 09:14:52 +08:00
|
|
|
|
box-sizing: border-box;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #3B82F6;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
padding-left: 20rpx;
|
|
|
|
|
|
&::before {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
top: 48rpx;
|
|
|
|
|
|
width: 8rpx;
|
|
|
|
|
|
height: 28rpx;
|
|
|
|
|
|
background: linear-gradient(135deg, #60A5FA 0%, #3B82F6 100%);
|
|
|
|
|
|
border-radius: 4rpx;
|
|
|
|
|
|
}
|
2025-04-16 09:14:52 +08:00
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.tips {
|
|
|
|
|
|
width: 100%;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #9CA3AF;
|
|
|
|
|
|
line-height: 1.6;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.card_li {
|
|
|
|
|
|
width: 100%;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding-top: 40rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding-bottom: 30rpx;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
&:not(:last-child)::after {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 1rpx;
|
|
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
.rule {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
align-items: center;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #1F2937;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
gap: 16rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
|
|
|
|
|
|
.input {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 6rpx 20rpx;
|
|
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
border: 2rpx solid transparent;
|
|
|
|
|
|
border-radius: 36rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
width: 250rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
height: 64rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:focus {
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
border-color: #3B82F6;
|
|
|
|
|
|
box-shadow: 0 0 0 4rpx rgba(59, 130, 246, 0.1);
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btns1 {
|
|
|
|
|
|
margin-left: auto;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 12rpx 24rpx;
|
|
|
|
|
|
background: #EFF6FF;
|
|
|
|
|
|
border-radius: 32rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #3B82F6;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.95);
|
|
|
|
|
|
background: #DBEAFE;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btns2 {
|
|
|
|
|
|
margin-left: auto;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
padding: 12rpx 24rpx;
|
|
|
|
|
|
background: #FEF2F2;
|
|
|
|
|
|
border-radius: 32rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #EF4444;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.95);
|
|
|
|
|
|
background: #FEE2E2;
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.tops {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.card_left {
|
|
|
|
|
|
font-weight: 600;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #1F2937;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.card_right {
|
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
color: #000;
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
span {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #000;
|
|
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.input {
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
line-height: 60rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
margin-right: 10rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
border: 1rpx solid #ccc;
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
width: 400rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
text-align: center;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-02-06 15:28:01 +08:00
|
|
|
|
|
|
|
|
|
|
.guide-video-upload {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
min-height: 280rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: #F3F4F6;
|
|
|
|
|
|
border: 2rpx dashed #D1D5DB;
|
|
|
|
|
|
border-radius: 24rpx;
|
2026-02-06 15:28:01 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
box-sizing: border-box;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
background: #E5E7EB;
|
|
|
|
|
|
}
|
2026-02-06 15:28:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.guide-video-placeholder {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
min-height: 280rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.guide-video-plus {
|
|
|
|
|
|
font-size: 80rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #9CA3AF;
|
2026-02-06 15:28:01 +08:00
|
|
|
|
line-height: 1;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
font-weight: 300;
|
2026-02-06 15:28:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.guide-video-preview {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
padding: 20rpx;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
position: relative;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
background: #fff;
|
|
|
|
|
|
border-radius: 24rpx;
|
|
|
|
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
|
2026-02-06 15:28:01 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.guide-video-preview-video {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 300rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
border-radius: 16rpx;
|
2026-02-06 15:28:01 +08:00
|
|
|
|
background: #000;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.guide-video-remove {
|
2026-04-28 14:01:46 +08:00
|
|
|
|
margin-top: 24rpx;
|
2026-02-06 15:28:01 +08:00
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-size: 28rpx;
|
2026-04-28 14:01:46 +08:00
|
|
|
|
color: #EF4444;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
padding: 16rpx 0;
|
|
|
|
|
|
background: #FEF2F2;
|
|
|
|
|
|
border-radius: 16rpx;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
transform: scale(0.98);
|
|
|
|
|
|
background: #FEE2E2;
|
|
|
|
|
|
}
|
2026-02-06 15:28:01 +08:00
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</style>
|