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>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="biaoti" style="margin-top: 30rpx;">
|
|
|
|
|
|
<view class=""></view> 基本信息
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<text style="color: #FF4444;margin-right: 2rpx;">*</text>车型名称
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="" style="text-align: right;">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<input type="text" v-model="data.name" placeholder="请输入车型名称" class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3">
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card">
|
2025-06-06 11:32:12 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
坐垫锁开启
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="data.enableSeat"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
低电量提醒
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="data.lowBatteryReminderSwitch"></u-switch>
|
|
|
|
|
|
<!-- <input type="text" v-model="data.lowBatteryReminder" placeholder="请输入提醒电量" class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3">
|
|
|
|
|
|
<span> %</span> -->
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2026-01-19 15:27:10 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
智能车
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="data.smart"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card_li" v-if="data.lowBatteryReminderSwitch">
|
2025-06-06 11:32:12 +08:00
|
|
|
|
<view class="card_left" style="width: 500rpx;">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
骑行低电量提醒(%)
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="text" v-model="data.lowBatteryReminder" placeholder="请输入提醒电量" class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3">
|
2025-11-08 09:37:13 +08:00
|
|
|
|
<span> %</span>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
是否自动生成换电工单
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<u-switch v-model="data.powerWorkEnable"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li" v-if="data.powerWorkEnable">
|
|
|
|
|
|
<view class="card_left" style="width: 500rpx;">
|
|
|
|
|
|
生成换电工单阈值(%)
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="text" v-model="data.powerWorkRate" placeholder="请输入提醒电量" class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<span> %</span>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
|
|
|
|
|
|
<view class="card_li">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card_left">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
是否校验工单完成
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<u-switch v-model="data.powerWorkCheck"></u-switch>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li" v-if="data.powerWorkCheck">
|
|
|
|
|
|
<view class="card_left" style="width: 500rpx;">
|
|
|
|
|
|
生成换电工单阈值(%)
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<input type="text" v-model="data.powerWorkFinishRate" placeholder="请输入校验阈值" class="input"
|
2025-04-01 21:35:30 +08:00
|
|
|
|
placeholder-style="color:#C7CDD3">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<span> %</span>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
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="biaoti" style="margin-top: 30rpx;">
|
|
|
|
|
|
<view class=""></view> 续航电量
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card" style="padding-bottom: 30rpx;">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card_li">
|
|
|
|
|
|
<view class="card_left">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
满电续航
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<input type="text" v-model="data.fullEndurance" placeholder="请输入续航" class="input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3">
|
|
|
|
|
|
<span> KM</span>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="cxlist" style="margin-top: 20rpx;padding-bottom: 10rpx;">
|
|
|
|
|
|
<view class="battery_table-tip" style="margin-bottom: 20rpx;">
|
|
|
|
|
|
点击使用官方推荐车型
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="cxitem" style="display: flex;align-items: center;width: 100%;overflow-x: auto;overflow-y: hidden;white-space: nowrap;-webkit-overflow-scrolling: touch;padding-bottom: 10rpx;">
|
|
|
|
|
|
<view v-for="(item,index) in officialModelList" :key="index" :class="cxindex == index ? 'cxactive' : ''" @click="selectOfficialModel(item,index)" style="display: inline-block;flex-shrink: 0;padding: 6rpx 20rpx;border: 1px solid #ccc;border-radius: 10rpx;margin-right: 20rpx;font-size: 28rpx;min-width: fit-content;">
|
|
|
|
|
|
{{item.name}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="battery_table">
|
|
|
|
|
|
<view class="battery_table-head" style="width: 670rpx;height: 78rpx;background-color: #F4F5F7;line-height: 78rpx;font-size: 28rpx;color: #3D3D3D;display: flex;justify-content: space-between;padding: 0 68rpx;">
|
|
|
|
|
|
<view class="col " style=""># 电压</view>
|
|
|
|
|
|
<view class="col ">电量</view>
|
|
|
|
|
|
<view class="col ">操作</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="battery_table-row" v-for="(item, index) in data.voltageRange" :key="index" style="padding-right: 38rpx;">
|
|
|
|
|
|
<view class="col index">{{ index + 1 }}</view>
|
|
|
|
|
|
<view class="col voltage">
|
|
|
|
|
|
<input type="digit" inputmode="decimal" v-model="item.voltage" placeholder="请输入电压" class="inline-input"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" />
|
|
|
|
|
|
<text class="unit">V</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="col power">
|
|
|
|
|
|
<input type="number" v-model="item.rate" placeholder="请输入电量" class="inline-input"
|
|
|
|
|
|
:disabled="isEdgePercent(index)" @blur="limitPercent(index)"
|
|
|
|
|
|
placeholder-style="color:#C7CDD3" />
|
|
|
|
|
|
<text class="unit">%</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="col action">
|
|
|
|
|
|
<text class="link" style="color: #4297F3;" v-if="index === 0" @click="addVoltageRow(index)">+ 添加</text>
|
|
|
|
|
|
<text
|
|
|
|
|
|
style="color: #4297F3;"
|
|
|
|
|
|
class="link delete"
|
|
|
|
|
|
v-else-if="index !== data.voltageRange.length - 1"
|
|
|
|
|
|
:class="{ disabled: !canRemoveRow(index) }"
|
|
|
|
|
|
@click="removeVoltageRow(index)"
|
|
|
|
|
|
>删除</text>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view class="battery_table-tip" style="padding-left: 30rpx;">
|
|
|
|
|
|
<text>首行电量固定为 0%,末行固定为 100%</text>
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="card">
|
|
|
|
|
|
<view class="card_li1">
|
|
|
|
|
|
<view class="card_top" @click="showpart = true">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
收费模版
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
<view class="iconfont icon-xiangyou1 " style="color: #CBCBCB;">
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view v-if="data.suitIds.length == 0" class="" style="width: 184rpx;height: 50rpx;border-radius: 6rpx;background-color: #4297F3;color: #fff;text-align: center;line-height: 50rpx;">
|
|
|
|
|
|
收费模版名称
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="taocan" v-if="data.suitIds">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<view v-for="(name, index) in getAccessoryNames()" :key="index" style=" display: flex;margin-top: 10rpx;">
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="tc_li">
|
|
|
|
|
|
{{ name }}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-12-20 14:29:10 +08:00
|
|
|
|
<!-- 所属运营区 -->
|
|
|
|
|
|
<!-- <view class="card" @click="btnyunying">
|
|
|
|
|
|
<view class="card_li1">
|
|
|
|
|
|
<view class="card_top" style="border: none;">
|
|
|
|
|
|
<view class="card_left">
|
|
|
|
|
|
所属运营区
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_right">
|
|
|
|
|
|
太姥山
|
|
|
|
|
|
<view class="iconfont icon-xiangyou1 " style="color: #CBCBCB;"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<u-mask :show="yunyingflag" :z-index='100' @click="closeOfficialModal()" />
|
|
|
|
|
|
<view class="choose_part official_part" v-if="yunyingflag">
|
|
|
|
|
|
<view class="tit">
|
|
|
|
|
|
运营区
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view class="part_box" @scrolltolower="handqixing" scroll-y >
|
|
|
|
|
|
<view class="official_list">
|
|
|
|
|
|
<view class="official_item" v-for="item in yunyinglist" :key="item.id">
|
|
|
|
|
|
<view class="info">
|
|
|
|
|
|
<view class="name">{{ item.name.length > 8 ? item.name.slice(0,8) + '...' : item.name}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="choose_btn" @click="selectOfficialModel(item)">选择</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="empty" v-if="!officialModelList.length">
|
|
|
|
|
|
暂无运营区
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="btn" @click="closeOfficialModal">
|
|
|
|
|
|
关闭
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view> -->
|
|
|
|
|
|
|
|
|
|
|
|
<u-mask :show="showOfficialModal" :z-index='100' @click="closeOfficialModal()" />
|
|
|
|
|
|
<view class="choose_part official_part" v-if="showOfficialModal">
|
|
|
|
|
|
<view class="tit">
|
|
|
|
|
|
官方推荐车型
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view class="part_box" scroll-y>
|
|
|
|
|
|
<view class="official_list">
|
|
|
|
|
|
<view class="official_item" v-for="item in officialModelList" :key="item.id">
|
|
|
|
|
|
<view class="info">
|
|
|
|
|
|
<view class="name">{{ item.name.length > 8 ? item.name.slice(0,8) + '...' : item.name}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="choose_btn" @click="selectOfficialModel(item)">选择</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="empty" v-if="!officialModelList.length">
|
|
|
|
|
|
暂无官方车型
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="btn" @click="closeOfficialModal">
|
|
|
|
|
|
关闭
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<u-mask :show="showpart" :z-index='100' @click="closepart()" />
|
|
|
|
|
|
<view class="choose_part" v-if="showpart">
|
|
|
|
|
|
<view class="tit">
|
|
|
|
|
|
选择收费方式
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view class="part_box" scroll-y>
|
|
|
|
|
|
<view class="part_list">
|
|
|
|
|
|
<view class="part_item" v-for="(item, index) in Accessorylist" :key="index"
|
|
|
|
|
|
@click="chooseAcc(item.id)">
|
|
|
|
|
|
<view class="part" :class="data.suitIds.includes(item.id) ? 'act' : ''">
|
|
|
|
|
|
{{ item.name }}
|
|
|
|
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uJNlGEGmN0F4AuPJmOZn" mode=""
|
|
|
|
|
|
v-if="data.suitIds.includes(item.id)">
|
|
|
|
|
|
</image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="btn" @click="subacc()">
|
|
|
|
|
|
确定
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-09-22 17:08:55 +08:00
|
|
|
|
<!-- 新增:底部图标与车辆照片字段 -->
|
|
|
|
|
|
<view class="card" style="padding-bottom: 50rpx;">
|
|
|
|
|
|
<view class="card_li" style="margin-top: 30rpx;">
|
|
|
|
|
|
<view class="up_left">
|
|
|
|
|
|
<view class="txt1">
|
|
|
|
|
|
图标
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="txt2">
|
|
|
|
|
|
建议使用清晰、方正的小图标,也可点击下方快速选择图标
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="up_rignt" @click="chooseone">
|
|
|
|
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/u08cpfIllwweGcS9awYP" mode=""
|
|
|
|
|
|
v-if="data.icon == null || data.icon == ''"></image>
|
|
|
|
|
|
<image :src="data.icon" mode="aspectFit" v-else></image>
|
|
|
|
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uFp9riSLtpmuq6gyKfdr" mode="aspectFill" class="close"
|
|
|
|
|
|
v-if="data.icon != ''" @click.stop="data.icon = ''"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="" style="display: flex;align-items: center;flex-wrap: wrap;gap: 26rpx;margin-top: 20rpx;">
|
|
|
|
|
|
<view class="" style="width: 66rpx;height: 76rpx;" v-for="(item,index) in quickIcons" :key="index" @click="btnimg(item)">
|
|
|
|
|
|
<image :src="item" mode="aspectFill" style="width: 66rpx;height: 76rpx;"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="card_li" style="margin-top: 30rpx;">
|
|
|
|
|
|
<view class="up_left">
|
|
|
|
|
|
<view class="txt1">
|
|
|
|
|
|
车辆照片
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="txt2">
|
|
|
|
|
|
请上传车辆实拍照,保持清晰完整
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="up_rignt" @click="choosetwo">
|
|
|
|
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/u08cpfIllwweGcS9awYP" mode=""
|
|
|
|
|
|
v-if="data.picture == null || data.picture == ''"></image>
|
|
|
|
|
|
<image :src="data.picture" mode="aspectFit" v-else></image>
|
|
|
|
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uFp9riSLtpmuq6gyKfdr" mode="" class="close"
|
|
|
|
|
|
v-if="data.picture != ''" @click.stop="data.picture = ''"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="" style="display: flex;align-items: center;flex-wrap: wrap;gap: 26rpx;margin-top: 20rpx;">
|
|
|
|
|
|
<view class="" style="width: 110rpx;height: 110rpx;" v-for="(item,index) in cheIcons" :key="index" @click="btnimgs(item)">
|
|
|
|
|
|
<image :src="item" mode="aspectFit" style="width: 110rpx;height: 92rpx;"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-04-01 21:35:30 +08:00
|
|
|
|
<view class="btn_box">
|
|
|
|
|
|
<view class="btn1" @click="backpage()">
|
|
|
|
|
|
取消
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="btn2" @click="sub">
|
|
|
|
|
|
保存
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
bgc: {
|
|
|
|
|
|
backgroundColor: "#fff",
|
|
|
|
|
|
},
|
|
|
|
|
|
showpart: false,
|
|
|
|
|
|
list: [],
|
|
|
|
|
|
Accessorylist: [],
|
|
|
|
|
|
chooseIdxArr: [], // 存储选中的索引
|
|
|
|
|
|
data: {
|
|
|
|
|
|
model: "",
|
|
|
|
|
|
fullVoltage: "",
|
|
|
|
|
|
lowVoltage: "",
|
|
|
|
|
|
fullEndurance: "",
|
|
|
|
|
|
suitIds: [],
|
|
|
|
|
|
lowBatteryReminder: '20',
|
2025-06-06 11:32:12 +08:00
|
|
|
|
lowBatteryReminderSwitch: false,
|
2026-01-19 15:27:10 +08:00
|
|
|
|
smart: false,
|
2025-09-22 17:08:55 +08:00
|
|
|
|
enableSeat:false,
|
|
|
|
|
|
icon: '',
|
2025-12-20 14:29:10 +08:00
|
|
|
|
picture: '',
|
|
|
|
|
|
voltageRange: [
|
|
|
|
|
|
{
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
rate: 0
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
rate: 100
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
2025-04-01 21:35:30 +08:00
|
|
|
|
},
|
2025-12-20 14:29:10 +08:00
|
|
|
|
officialModelList: [],
|
|
|
|
|
|
showOfficialModal: false,
|
2025-04-01 21:35:30 +08:00
|
|
|
|
token: '',
|
|
|
|
|
|
upurl: '',
|
|
|
|
|
|
modelId: '',
|
|
|
|
|
|
areaId: '',
|
2025-04-28 15:40:26 +08:00
|
|
|
|
userinfo:'',
|
2025-09-22 17:08:55 +08:00
|
|
|
|
quickIcons: [
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014527@3x-1758175543796.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014531@3x-1758175543841.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014535@3x-1758175543842.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014533@3x-1758175543842.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014529@3x-1758175543841.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%201095@3x-1758175543790.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014528@3x-1758175543841.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014532@3x-1758175543843.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014536@3x-1758175543842.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014534@3x-1758175543842.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%2014530@3x-1758175543842.png',
|
|
|
|
|
|
'https://api.ccttiot.com/%E7%BB%84%201096@3x-1758175543796.png',
|
|
|
|
|
|
],
|
|
|
|
|
|
cheIcons: [
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/uei3dDAuPNNe9E65yi6g',
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/uSbp86vrre2xwjZho2iX',
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/u1FoIt3IRUOer3uGOOTI',
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/ulHNoYWHpoTcnoIlzgbp',
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/uI2eOX98s1wyr2LHzRK3',
|
|
|
|
|
|
'https://api.ccttiot.com/smartmeter/img/static/uHTSUlE69nyHst0ec8jV'
|
|
|
|
|
|
],
|
2025-12-20 14:29:10 +08:00
|
|
|
|
yunyinglist:[],
|
|
|
|
|
|
yunyingflag:false,
|
|
|
|
|
|
yunyingtotal:0,
|
|
|
|
|
|
yunyingpagenum:1,
|
|
|
|
|
|
cxindex:-1
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad(e) {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
this.getchexlist()
|
2025-04-01 21:35:30 +08:00
|
|
|
|
if (e.modelId) {
|
|
|
|
|
|
console.log(e);
|
|
|
|
|
|
this.modelId = e.modelId
|
|
|
|
|
|
this.getmodelInfo()
|
|
|
|
|
|
}
|
|
|
|
|
|
if (uni.getStorageSync('adminAreaid')) {
|
|
|
|
|
|
this.areaId = uni.getStorageSync('adminAreaid')
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
this.getinfo()
|
2025-09-22 17:08:55 +08:00
|
|
|
|
this.getQiniuToken()
|
2025-04-01 21:35:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// // 点击请求运营区
|
|
|
|
|
|
// btnyunying(){
|
|
|
|
|
|
// this.$u.get(`/bst/area/list?pageNum=${this.yunyingpagenum}&pageSize=20`).then((res) => {
|
|
|
|
|
|
// if (res.code == 200) {
|
|
|
|
|
|
// this.yunyingtotal = res.total
|
|
|
|
|
|
// if(this.yunyingpagenum == 1){
|
|
|
|
|
|
// this.yunyinglist = res.rows
|
|
|
|
|
|
// this.yunyingflag = true
|
|
|
|
|
|
// this.yunyingpagenum++
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
// this.yunyinglist = this.yunyinglist.concat(res.rows)
|
|
|
|
|
|
// this.yunyingflag = true
|
|
|
|
|
|
// this.yunyingpagenum++
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// })
|
|
|
|
|
|
// },
|
|
|
|
|
|
// handqixing(){
|
|
|
|
|
|
// if(this.yunyinglist.length < this.yunyingtotal){
|
|
|
|
|
|
// this.btnyunying()
|
|
|
|
|
|
// }
|
|
|
|
|
|
// },
|
|
|
|
|
|
// 请求官方车型
|
|
|
|
|
|
getchexlist(){
|
|
|
|
|
|
this.$u.get(`/bst/modelPreset/list`).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.officialModelList = res.rows || []
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
openOfficialModal() {
|
|
|
|
|
|
if (!this.officialModelList.length) {
|
|
|
|
|
|
this.getchexlist()
|
|
|
|
|
|
}
|
|
|
|
|
|
this.showOfficialModal = true
|
|
|
|
|
|
},
|
|
|
|
|
|
closeOfficialModal() {
|
|
|
|
|
|
this.showOfficialModal = false
|
|
|
|
|
|
},
|
|
|
|
|
|
selectOfficialModel(item,index) {
|
|
|
|
|
|
this.cxindex = index
|
|
|
|
|
|
this.setVoltageList(item.voltageRange || item.voltagePowerList || [])
|
|
|
|
|
|
if (item.fullEndurance !== undefined && item.fullEndurance !== null) {
|
|
|
|
|
|
this.$set(this.data, 'fullEndurance', item.fullEndurance)
|
|
|
|
|
|
}
|
|
|
|
|
|
this.closeOfficialModal()
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '已应用官方车型',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 1200
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
createDefaultVoltageList() {
|
|
|
|
|
|
return [
|
|
|
|
|
|
{
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
power: 0
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
power: 100
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
setVoltageList(list) {
|
|
|
|
|
|
const formatted = this.normalizeVoltageList(list)
|
|
|
|
|
|
this.$set(this.data, 'voltageRange', formatted)
|
|
|
|
|
|
},
|
|
|
|
|
|
normalizeVoltageList(list) {
|
|
|
|
|
|
let parsed = list
|
|
|
|
|
|
if (typeof parsed === 'string') {
|
|
|
|
|
|
try {
|
|
|
|
|
|
parsed = JSON.parse(parsed)
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
parsed = []
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!Array.isArray(parsed) || !parsed.length) {
|
|
|
|
|
|
parsed = this.createDefaultVoltageList()
|
|
|
|
|
|
}
|
|
|
|
|
|
const cleaned = parsed.map(item => ({
|
|
|
|
|
|
voltage: item && item.voltage !== undefined ? item.voltage : '',
|
|
|
|
|
|
rate: item && (item.rate !== undefined ? item.rate : item.power !== undefined ? item.power : '')
|
|
|
|
|
|
}))
|
|
|
|
|
|
if (cleaned.length < 2) {
|
|
|
|
|
|
cleaned.push({
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
rate: 100
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
cleaned[0].rate = 0
|
|
|
|
|
|
cleaned[cleaned.length - 1].rate = 100
|
|
|
|
|
|
return cleaned
|
|
|
|
|
|
},
|
|
|
|
|
|
ensureEdgePower() {
|
|
|
|
|
|
const list = this.data.voltageRange
|
|
|
|
|
|
if (!Array.isArray(list) || !list.length) {
|
|
|
|
|
|
this.setVoltageList([])
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
const lastIndex = list.length - 1
|
|
|
|
|
|
this.$set(list[0], 'rate', 0)
|
|
|
|
|
|
this.$set(list[lastIndex], 'rate', 100)
|
|
|
|
|
|
},
|
|
|
|
|
|
addVoltageRow(index) {
|
|
|
|
|
|
const insertIndex = index + 1
|
|
|
|
|
|
this.data.voltageRange.splice(insertIndex, 0, {
|
|
|
|
|
|
voltage: '',
|
|
|
|
|
|
rate: ''
|
|
|
|
|
|
})
|
|
|
|
|
|
this.ensureEdgePower()
|
|
|
|
|
|
},
|
|
|
|
|
|
removeVoltageRow(index) {
|
|
|
|
|
|
if (!this.canRemoveRow(index)) return
|
|
|
|
|
|
this.data.voltageRange.splice(index, 1)
|
|
|
|
|
|
this.ensureEdgePower()
|
|
|
|
|
|
},
|
|
|
|
|
|
isEdgePercent(index) {
|
|
|
|
|
|
return index === 0 || index === this.data.voltageRange.length - 1
|
|
|
|
|
|
},
|
|
|
|
|
|
canRemoveRow(index) {
|
|
|
|
|
|
return this.data.voltageRange.length > 2 && !this.isEdgePercent(index)
|
|
|
|
|
|
},
|
|
|
|
|
|
limitPercent(index) {
|
|
|
|
|
|
if (this.isEdgePercent(index)) return
|
|
|
|
|
|
let value = this.data.voltageRange[index].rate
|
|
|
|
|
|
value = value === '' || value === null || value === undefined ? '' : Number(value)
|
|
|
|
|
|
if (value === '') {
|
|
|
|
|
|
this.$set(this.data.voltageRange[index], 'rate', '')
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (isNaN(value)) value = 0
|
|
|
|
|
|
if (value < 0) value = 0
|
|
|
|
|
|
if (value > 100) value = 100
|
|
|
|
|
|
this.$set(this.data.voltageRange[index], 'rate', value)
|
|
|
|
|
|
},
|
|
|
|
|
|
validateVoltageTable() {
|
|
|
|
|
|
const list = this.data.voltageRange || []
|
|
|
|
|
|
if (!list.length) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请至少配置两行电压电量',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
for (let i = 0; i < list.length; i++) {
|
|
|
|
|
|
const item = list[i]
|
|
|
|
|
|
if (item.voltage === '' || item.voltage === null || item.voltage === undefined) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: `请填写第${i + 1}行电压`,
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
if (item.rate === '' || item.rate === null || item.rate === undefined) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: `请填写第${i + 1}行电量`,
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (Number(list[0].rate) !== 0 || Number(list[list.length - 1].rate) !== 100) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '首行电量需为0,末行为100',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
|
|
|
},
|
2025-09-22 17:08:55 +08:00
|
|
|
|
// 点击快捷选择图标
|
|
|
|
|
|
btnimg(item){
|
|
|
|
|
|
this.data.icon = item
|
|
|
|
|
|
},
|
|
|
|
|
|
// 点击快捷选择车辆图片
|
|
|
|
|
|
btnimgs(item){
|
|
|
|
|
|
this.data.picture = item
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取上传七牛云token
|
|
|
|
|
|
getQiniuToken() {
|
|
|
|
|
|
this.$u.get("/common/qiniuToken").then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.token = res.data
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
chooseone() {
|
|
|
|
|
|
let _this = this
|
|
|
|
|
|
let math = 'static/' + _this.$u.guid(20)
|
|
|
|
|
|
uni.chooseImage({
|
|
|
|
|
|
count: 1,
|
|
|
|
|
|
type: 'image',
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
const tempFilePaths = res.tempFiles
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
url: 'https://up-z2.qiniup.com',
|
|
|
|
|
|
name: 'file',
|
|
|
|
|
|
filePath: tempFilePaths[0].path,
|
|
|
|
|
|
formData: {
|
|
|
|
|
|
token: _this.token, //后端返回的token
|
|
|
|
|
|
key: 'smartmeter/img/' + math
|
|
|
|
|
|
},
|
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
console.log(res, 'resres');
|
|
|
|
|
|
let str = JSON.parse(res.data)
|
|
|
|
|
|
console.log(str.key)
|
|
|
|
|
|
_this.data.icon = 'https://api.ccttiot.com/' + str.key
|
|
|
|
|
|
console.log(_this.data.icon);
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
choosetwo() {
|
|
|
|
|
|
let _this = this
|
|
|
|
|
|
let math = 'static/' + _this.$u.guid(20)
|
|
|
|
|
|
uni.chooseImage({
|
|
|
|
|
|
count: 1,
|
|
|
|
|
|
type: 'image',
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
const tempFilePaths = res.tempFiles
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
url: 'https://up-z2.qiniup.com',
|
|
|
|
|
|
name: 'file',
|
|
|
|
|
|
filePath: tempFilePaths[0].path,
|
|
|
|
|
|
formData: {
|
|
|
|
|
|
token: _this.token, //后端返回的token
|
|
|
|
|
|
key: 'smartmeter/img/' + math
|
|
|
|
|
|
},
|
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
console.log(res, 'resres');
|
|
|
|
|
|
let str = JSON.parse(res.data)
|
|
|
|
|
|
console.log(str.key)
|
|
|
|
|
|
_this.data.picture = 'https://api.ccttiot.com/' + str.key
|
|
|
|
|
|
console.log(_this.data.picture);
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-04-01 21:35:30 +08:00
|
|
|
|
getinfo() {
|
|
|
|
|
|
this.$u.get("/getInfo").then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.userinfo = res.user
|
2025-04-28 15:40:26 +08:00
|
|
|
|
this.getAccessorylist()
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
closepart() {
|
|
|
|
|
|
this.showpart = false
|
|
|
|
|
|
},
|
|
|
|
|
|
getmodelInfo() {
|
|
|
|
|
|
this.$u.get(`/bst/model/${this.modelId}`).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
const remoteData = res.data || {}
|
|
|
|
|
|
this.data = Object.assign({}, this.data, remoteData)
|
|
|
|
|
|
this.data.suitIds = remoteData.suitIds || []
|
|
|
|
|
|
this.setVoltageList(remoteData.voltageRange || remoteData.voltagePowerList || [])
|
2025-04-01 21:35:30 +08:00
|
|
|
|
console.log(this.data, 'this.datathis.data');
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// 点击返回上一级
|
2025-04-01 21:35:30 +08:00
|
|
|
|
backpage() {
|
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
|
},
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// 点击保存
|
2025-04-01 21:35:30 +08:00
|
|
|
|
sub() {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
if (!this.validateVoltageTable()) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
if (this.modelId) {
|
|
|
|
|
|
// this.data.areaId = this.areaId
|
|
|
|
|
|
this.data.userId = this.userinfo.userId
|
|
|
|
|
|
this.$u.put("/bst/model", this.data).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '操作成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 1000
|
|
|
|
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
|
}, 1200)
|
|
|
|
|
|
}else{
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
2025-12-20 14:29:10 +08:00
|
|
|
|
duration: 5000
|
2025-09-22 17:08:55 +08:00
|
|
|
|
})
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
this.data.areaId = this.areaId
|
2025-04-01 21:35:30 +08:00
|
|
|
|
this.data.userId = this.userinfo.userId
|
|
|
|
|
|
this.$u.post("/bst/model", this.data).then((res) => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '操作成功',
|
|
|
|
|
|
icon: 'success',
|
|
|
|
|
|
duration: 1000
|
|
|
|
|
|
});
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.navigateBack()
|
|
|
|
|
|
}, 1200)
|
|
|
|
|
|
}else{
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
2025-12-20 14:29:10 +08:00
|
|
|
|
duration: 5000
|
2025-04-01 21:35:30 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
subacc() {
|
|
|
|
|
|
this.showpart = false
|
|
|
|
|
|
console.log(this.chooseIdxArr)
|
|
|
|
|
|
},
|
|
|
|
|
|
chooseAcc(id) {
|
|
|
|
|
|
const index = this.data.suitIds.indexOf(id)
|
|
|
|
|
|
if (index > -1) {
|
|
|
|
|
|
// 如果 id 已经存在于 suitIds 中,则从数组中删除
|
|
|
|
|
|
this.data.suitIds.splice(index, 1)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 如果 id 不存在,则添加到 suitIds 中
|
|
|
|
|
|
this.data.suitIds.push(id)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
getAccessoryNames(accessoryIds) {
|
|
|
|
|
|
const accessoryNames = this.data.suitIds.map(id => {
|
|
|
|
|
|
const item = this.Accessorylist.find(accessory => accessory.id === id)
|
|
|
|
|
|
return item ? item.name : ''
|
|
|
|
|
|
})
|
|
|
|
|
|
// 过滤掉空值并返回数组
|
|
|
|
|
|
return accessoryNames.filter(name => name)
|
|
|
|
|
|
},
|
|
|
|
|
|
getAccessorylist() {
|
2026-01-28 18:00:39 +08:00
|
|
|
|
this.$u.get(`/bst/suit/list?pageNum=1&pageSize=999&areaId=${this.areaId}&temp=false`).then((res) => {
|
2025-04-01 21:35:30 +08:00
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.Accessorylist = res.rows
|
|
|
|
|
|
} else {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
2025-12-20 14:29:10 +08:00
|
|
|
|
duration: 5000
|
2025-04-01 21:35:30 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss">
|
2025-12-20 14:29:10 +08:00
|
|
|
|
.cxactive{
|
|
|
|
|
|
background-color: #4297F3 !important;
|
|
|
|
|
|
color: #fff !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
.biaoti{
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
padding-left: 20rpx;
|
|
|
|
|
|
margin-top: 40rpx;
|
|
|
|
|
|
view{
|
|
|
|
|
|
width: 16rpx;
|
|
|
|
|
|
height: 46rpx;
|
|
|
|
|
|
background: #4297F3;
|
|
|
|
|
|
border-radius: 0 10rpx 10rpx 0;
|
|
|
|
|
|
margin-right: 12rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.page {
|
2025-09-22 17:08:55 +08:00
|
|
|
|
padding-bottom: 500rpx;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
overflow: scroll;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.choose_part {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
|
z-index: 110;
|
|
|
|
|
|
width: 644rpx;
|
|
|
|
|
|
padding: 40rpx 48rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 26rpx;
|
|
|
|
|
|
.part_box {
|
|
|
|
|
|
margin-top: 40rpx;
|
|
|
|
|
|
max-height: 600rpx;
|
|
|
|
|
|
.part_list {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 20rpx;
|
|
|
|
|
|
.part_item {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
.part {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
padding: 20rpx;
|
|
|
|
|
|
background: #F0F0F0;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
border: 1rpx solid #F0F0F0;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
image {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: 10rpx;
|
|
|
|
|
|
bottom: 10rpx;
|
|
|
|
|
|
width: 34rpx;
|
|
|
|
|
|
height: 34rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
&.act {
|
|
|
|
|
|
background: #DCEDFF;
|
|
|
|
|
|
border: 1rpx solid #4297F3;
|
|
|
|
|
|
color: #4297F3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.tit {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
margin-bottom: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
margin-top: 40rpx;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
|
background: #4C97E7;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
opacity: 0.9;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.btn_box {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
width: 750rpx;
|
|
|
|
|
|
bottom: 50rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-content: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
.btn1 {
|
|
|
|
|
|
margin-right: 52rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
width: 310rpx;
|
|
|
|
|
|
height: 100rpx;
|
|
|
|
|
|
background: #E2F2FF;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 40rpx;
|
|
|
|
|
|
color: #4C97E7;
|
|
|
|
|
|
}
|
|
|
|
|
|
.btn2 {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
width: 310rpx;
|
|
|
|
|
|
height: 100rpx;
|
|
|
|
|
|
background: #4C97E7;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 40rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.card {
|
|
|
|
|
|
padding: 0 24rpx;
|
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
|
margin-top: 24rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 710rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
|
2025-12-20 14:29:10 +08:00
|
|
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.card_li:last-child {
|
|
|
|
|
|
border-bottom: 1rpx solid #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
.card_li1 {
|
|
|
|
|
|
padding-top: 24rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
.taocan {
|
|
|
|
|
|
margin-top: 10rpx;
|
|
|
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 100%;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.tc_li {
|
|
|
|
|
|
padding: 8rpx 14rpx;
|
|
|
|
|
|
margin-right: 20rpx;
|
|
|
|
|
|
background: #DCEDFF;
|
|
|
|
|
|
border-radius: 6rpx 6rpx 6rpx 6rpx;
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #4297F3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.card_top {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-content: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
width: 100%;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// border-bottom: 1rpx solid #D8D8D8;
|
|
|
|
|
|
padding-bottom: 22rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
.card_left {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
.card_right {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
span {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
.input {
|
|
|
|
|
|
text-align: right;
|
|
|
|
|
|
/* 输入框内容靠右显示 */
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.card_li {
|
|
|
|
|
|
padding-top: 24rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-content: center;
|
|
|
|
|
|
justify-content: space-between;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
// border-bottom: 1rpx solid #D8D8D8;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
padding-bottom: 18rpx;
|
|
|
|
|
|
.up_left {
|
|
|
|
|
|
.txt1 {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
.txt2 {
|
|
|
|
|
|
margin-top: 16rpx;
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #3D3D3D;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.up_rignt {
|
2025-09-22 17:08:55 +08:00
|
|
|
|
width: 140rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
height: 110rpx;
|
2025-09-22 17:08:55 +08:00
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
overflow: hidden;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
image {
|
|
|
|
|
|
width: 110rpx;
|
|
|
|
|
|
height: 110rpx;
|
2025-09-22 17:08:55 +08:00
|
|
|
|
border-radius: 10rpx;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
.close {
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: 0;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
width: 25rpx;
|
|
|
|
|
|
height: 25rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.card_left {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
color: #3D3D3D;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
.card_right {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
span {
|
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #000;
|
|
|
|
|
|
}
|
|
|
|
|
|
.input {
|
2025-12-20 14:29:10 +08:00
|
|
|
|
text-align: center;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
/* 输入框内容靠右显示 */
|
|
|
|
|
|
color: #000;
|
2025-12-20 14:29:10 +08:00
|
|
|
|
width: 144rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
background: #F4F5F7;
|
|
|
|
|
|
border-radius: 12rpx 12rpx 12rpx 12rpx;
|
|
|
|
|
|
margin-right: 20rpx;
|
|
|
|
|
|
padding-left: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.battery_table {
|
|
|
|
|
|
width: 670rpx;
|
|
|
|
|
|
max-height: 11314rpx;
|
|
|
|
|
|
border-radius: 18rpx 18rpx 18rpx 18rpx;
|
|
|
|
|
|
border: 1rpx solid #808080;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
|
&-head,
|
|
|
|
|
|
&-row {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
padding: 12rpx 0;
|
|
|
|
|
|
border-bottom: 1rpx solid #F0F1F5;
|
|
|
|
|
|
.col {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
min-width: 0;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #111;
|
|
|
|
|
|
&.index {
|
|
|
|
|
|
width: 60rpx;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
&.voltage,
|
|
|
|
|
|
&.power {
|
|
|
|
|
|
// flex: 1;
|
|
|
|
|
|
margin-right: 20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
gap: 12rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
&.action {
|
|
|
|
|
|
width: 240rpx;
|
|
|
|
|
|
justify-content: flex-end;
|
|
|
|
|
|
gap: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
&-head {
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
color: #111;
|
|
|
|
|
|
border-bottom: 2rpx solid #D8D8D8;
|
|
|
|
|
|
}
|
|
|
|
|
|
.inline-input {
|
|
|
|
|
|
width: 300rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
line-height: 60rpx;
|
|
|
|
|
|
padding: 0 16rpx;
|
|
|
|
|
|
border: 1rpx solid #E0E0E0;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
text-align: left;
|
|
|
|
|
|
color: #111;
|
|
|
|
|
|
}
|
|
|
|
|
|
.unit {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #8A8A8A;
|
|
|
|
|
|
}
|
|
|
|
|
|
.link {
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
color: #4297F3;
|
|
|
|
|
|
&.disabled {
|
|
|
|
|
|
color: #C5C5C5;
|
|
|
|
|
|
pointer-events: none;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-20 14:29:10 +08:00
|
|
|
|
.link.delete {
|
|
|
|
|
|
color: #111;
|
|
|
|
|
|
}
|
|
|
|
|
|
&-row:last-of-type {
|
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
&-tip {
|
|
|
|
|
|
margin-top: 14rpx;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #8A8A8A;
|
|
|
|
|
|
&.link-tip {
|
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
|
color: #4297F3;
|
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.official_part {
|
|
|
|
|
|
.official_list {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 20rpx;
|
|
|
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.official_item {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 20rpx;
|
|
|
|
|
|
border: 1rpx solid #EFEFEF;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
background: #F9FAFB;
|
|
|
|
|
|
gap: 20rpx;
|
|
|
|
|
|
.cover {
|
|
|
|
|
|
width: 120rpx;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
border-radius: 10rpx;
|
|
|
|
|
|
object-fit: cover;
|
|
|
|
|
|
}
|
|
|
|
|
|
.info {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 10rpx;
|
|
|
|
|
|
.name {
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
color: #111;
|
|
|
|
|
|
}
|
|
|
|
|
|
.meta {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #666;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.choose_btn {
|
|
|
|
|
|
width: 120rpx;
|
|
|
|
|
|
height: 56rpx;
|
|
|
|
|
|
border-radius: 28rpx;
|
|
|
|
|
|
background: #4297F3;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.empty {
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
color: #999;
|
|
|
|
|
|
padding: 40rpx 0;
|
2025-04-01 21:35:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|