2025-07-10 14:43:10 +08:00

1030 lines
34 KiB
Vue

<template>
<view class="container">
<view class="form-panel">
<uni-card>
<uni-forms :modelValue="ebikeInfo">
<view v-if="modelShow" class="flex">
<text class="cuIcon-order lg text-gray" @click="showClick"></text>
<uni-forms-item label="中控SN" label-s name="ecuSn">
<ecuCodeScan
@scan-change="ecuCodeScanChange"
:codeValue="ebikeInfo.ecuSn"
scanValue="sn"
/>
</uni-forms-item>
</view>
<view v-else class="flex">
<text class="cuIcon-order lg text-gray" @click="showClick"></text>
<uni-forms-item label="车辆编号" name="bikeCode">
<bikeCodeScan
@scan-change="bikeCodeScanChange"
:codeValue="ebikeInfo.bikeCode"
/>
</uni-forms-item>
</view>
</uni-forms>
</uni-card>
<uni-card>
<view>
<uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 在线状态 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.online.load == 'loading'"
:status="detectionInfo.online.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.online.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.online.detectionState == 'error'"
>
{{ detectionInfo.online.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.online.detectionState == 'success'"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.online.detectionState == 'success'"
>
{{ detectionInfo.online.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.online.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'online' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> GPS坐标 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.gps.load == 'loading'"
:status="detectionInfo.gps.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.gps.detectionState"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.gps.detectionState"
>
{{ detectionInfo.gps.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.gps.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'gps', type: 'gps' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title">
SOC
<text
class="cuIcon-info lg text-gray"
@click="socClick"
style="display: inline-block; transform: rotate(180deg)"
></text>
</view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.soc.load == 'loading'"
:status="detectionInfo.soc.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.soc.detectionState"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.soc.detectionState"
>
{{ detectionInfo.soc.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.soc.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'gps', type: 'soc' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 电压(mv) </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.voltage.load == 'loading'"
:status="detectionInfo.voltage.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.voltage.detectionState"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.voltage.detectionState"
>
{{ detectionInfo.voltage.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.voltage.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'gps', type: 'voltage' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 打开电池仓 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.openBatteryLock.load == 'loading'"
:icon-size="15"
:status="detectionInfo.openBatteryLock.load"
iconType="circle"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="
detectionInfo.openBatteryLock.detectionState == 'error'
"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="
detectionInfo.openBatteryLock.detectionState == 'error'
"
>
{{ detectionInfo.openBatteryLock.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="
detectionInfo.openBatteryLock.detectionState ==
'success'
"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="
detectionInfo.openBatteryLock.detectionState ==
'success'
"
>
{{ detectionInfo.openBatteryLock.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.openBatteryLock.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'openBatteryLock' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 开锁 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.unlock.load == 'loading'"
:status="detectionInfo.unlock.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.unlock.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.unlock.detectionState == 'error'"
>
{{ detectionInfo.unlock.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.unlock.detectionState == 'success'"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.unlock.detectionState == 'success'"
>
{{ detectionInfo.unlock.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.unlock.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'unlock' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 开头盔 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.openHelmet.load == 'loading'"
:status="detectionInfo.openHelmet.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.openHelmet.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.openHelmet.detectionState == 'error'"
>
{{ detectionInfo.openHelmet.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="
detectionInfo.openHelmet.detectionState == 'success'
"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="
detectionInfo.openHelmet.detectionState == 'success'
"
>
{{ detectionInfo.openHelmet.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.openHelmet.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'openHelmet' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 关锁 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.lock.load == 'loading'"
:status="detectionInfo.lock.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.lock.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.lock.detectionState == 'error'"
>
{{ detectionInfo.lock.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.lock.detectionState == 'success'"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.lock.detectionState == 'success'"
>
{{ detectionInfo.lock.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.lock.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'lock' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 寻车铃 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.findEbike.load == 'loading'"
:status="detectionInfo.findEbike.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.findEbike.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.findEbike.detectionState == 'error'"
>
{{ detectionInfo.findEbike.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.findEbike.detectionState == 'success'"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.findEbike.detectionState == 'success'"
>
{{ detectionInfo.findEbike.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.findEbike.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'findEbike' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 关闭电源 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.powerOff.load == 'loading'"
:status="detectionInfo.powerOff.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.powerOff.detectionState == 'error'"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.powerOff.detectionState == 'error'"
>
{{ detectionInfo.powerOff.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="detectionInfo.powerOff.detectionState == 'success'"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="detectionInfo.powerOff.detectionState == 'success'"
>
{{ detectionInfo.powerOff.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.powerOff.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'powerOff' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
<uni-list :border="true">
<view class="flex" style="padding: 10px 0 10px 0">
<view class="zk-title"> 取消设防 </view>
<view class="zk-state">
<view class="cu-info">
<uni-load-more
v-if="detectionInfo.cancelAntiTheft.load == 'loading'"
:status="detectionInfo.cancelAntiTheft.load"
iconType="circle"
:icon-size="15"
:content-text="contentText"
/>
</view>
<view class="cu-info">
<text
v-if="
detectionInfo.cancelAntiTheft.detectionState == 'error'
"
class="cuIcon-roundclosefill text-red"
></text>
<text
class="margin-left-sm"
v-if="
detectionInfo.cancelAntiTheft.detectionState == 'error'
"
>
{{ detectionInfo.cancelAntiTheft.msg }}
</text>
</view>
<view class="cu-info">
<text
v-if="
detectionInfo.cancelAntiTheft.detectionState ==
'success'
"
class="cuIcon-roundcheckfill text-green"
></text>
<text
class="margin-left-sm"
v-if="
detectionInfo.cancelAntiTheft.detectionState ==
'success'
"
>
{{ detectionInfo.cancelAntiTheft.msg }}
</text>
</view>
</view>
<view class="zk-but">
<view style="bottom: 10rpx; width: 100%">
<button
:disabled="detectionInfo.cancelAntiTheft.btuDisabled"
style="width: 60px; height: 35px; font-size: 15px"
type="primary"
@click="execDetection({ url: 'cancelAntiTheft' })"
>
执行
</button>
</view>
</view>
</view>
</uni-list>
</uni-list>
</view>
</uni-card>
</view>
<view class="nav-panel">
<c-uni-goods-nav
:fill="true"
:options="[]"
:buttonGroup="navButtonGroup"
@buttonClick="autoDetection"
/>
</view>
</view>
</template>
<script setup>
import { reactive, ref } from "vue";
import * as api from "@/utils/api.js";
import { showModelMessage } from "@/utils/tools.js";
import config from "../../../utils/config";
const ebikeInfo = ref({
ecuCode: "",
bikeCode: "",
ecuId: "",
ecuSn: "",
});
const reqState = ref(false);
const detectionInfo = ref({
online: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
findEbike: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
gps: {
load: "",
btuDisabled: true,
detectionState: false,
msg: "",
},
soc: {
load: "",
btuDisabled: true,
detectionState: false,
msg: "",
},
openBatteryLock: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
lock: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
unlock: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
openHelmet: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
voltage: {
load: "",
btuDisabled: true,
detectionState: false,
msg: "",
},
cancelAntiTheft: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
powerOff: {
load: "",
btuDisabled: true,
detectionState: "",
msg: "",
},
});
const modelShow = ref(true);
const urlList = ref([]);
const contentText = ref({
contentdown: "",
contentrefresh: "测试中",
contentnomore: "",
});
const showClick = () => {
modelShow.value = !modelShow.value;
};
const navButtonGroup = reactive([
{
text: "自动测试",
backgroundColor: "#0078D4",
color: "#fff",
disable: true,
},
]);
const bikeCodeScanChange = (data) => {
api.callEbikeInfo("getBikeINfoData?bikeCode=" + data).then((res) => {
ebikeInfo.value.ecuCode = res.data.ecuCode;
ebikeInfo.value.bikeId = res.data.bikeId;
ebikeInfo.value.ecuId = res.data.ecuId;
ebikeInfo.value.ecuSn = res.data.ecuSn;
detectionInfo.value.online.btuDisabled = false;
detectionInfo.value.findEbike.btuDisabled = false;
detectionInfo.value.gps.btuDisabled = false;
detectionInfo.value.soc.btuDisabled = false;
detectionInfo.value.openBatteryLock.btuDisabled = false;
detectionInfo.value.lock.btuDisabled = false;
detectionInfo.value.unlock.btuDisabled = false;
detectionInfo.value.openHelmet.btuDisabled = false;
detectionInfo.value.voltage.btuDisabled = false;
detectionInfo.value.cancelAntiTheft.btuDisabled = false;
detectionInfo.value.powerOff.btuDisabled = false;
navButtonGroup[0].disable = false;
});
};
const ecuCodeScanChange = (data) => {
ebikeInfo.value.ecuCode = data["imei"];
ebikeInfo.value.ecuSn = data["sn"];
detectionInfo.value.online.btuDisabled = false;
detectionInfo.value.findEbike.btuDisabled = false;
detectionInfo.value.gps.btuDisabled = false;
detectionInfo.value.soc.btuDisabled = false;
detectionInfo.value.openBatteryLock.btuDisabled = false;
detectionInfo.value.lock.btuDisabled = false;
detectionInfo.value.unlock.btuDisabled = false;
detectionInfo.value.openHelmet.btuDisabled = false;
detectionInfo.value.voltage.btuDisabled = false;
detectionInfo.value.cancelAntiTheft.btuDisabled = false;
detectionInfo.value.powerOff.btuDisabled = false;
navButtonGroup[0].disable = false;
};
const socClick = () => {
showModelMessage("中控读取电池BMS返回的电量", "SOC说明", false, "我知道了");
};
const execDetection = (url) => {
if (reqState.value) {
uni.showToast({
title: "指令执行中,请稍后",
icon: "none",
});
detectionInfo.value[url["url"]].btuDisable = false;
return;
}
if (url["type"]) {
detectionInfo.value[url["type"]].load = "loading";
detectionInfo.value[url["type"]].btuDisable = true;
detectionInfo.value[url["type"]].detectionState = "";
} else {
detectionInfo.value[url["url"]].load = "loading";
detectionInfo.value[url["url"]].btuDisable = true;
detectionInfo.value[url["url"]].detectionState = "";
}
reqState.value = true;
var paramName = "ecuSn";
var data = ebikeInfo.value.ecuSn;
var bikeId = ebikeInfo.value.bikeId;
api
.callEcuCoreApi(
url["url"] + "?" + paramName + "=" + data + "&bikeId=" + bikeId,
{},
"get"
)
.then((res) => {
if (url["type"]) {
api
.callEcuCoreApi(
"gpsMsg" + "?ecuSn=" + ebikeInfo.value.ecuSn,
{},
"get"
)
.then((res) => {
detectionInfo.value[url["type"]].load = "";
reqState.value = false;
detectionInfo.value[url["type"]].btuDisable = false;
if (url["type"] == "gps") {
detectionInfo.value[url["type"]].msg =
"东经:" +
res.data.longitude +
"°,北纬:" +
res.data.latitude +
"°";
} else {
detectionInfo.value[url["type"]].msg = res.data[url["type"]];
}
detectionInfo.value[url["type"]].detectionState = true;
});
} else {
detectionInfo.value[url["url"]].load = "";
reqState.value = false;
detectionInfo.value[url["url"]].btuDisable = false;
detectionInfo.value[url["url"]].msg = res.data.message;
if (res.data.code == 200) {
detectionInfo.value[url["url"]].detectionState = "success";
} else {
detectionInfo.value[url["url"]].detectionState = "error";
}
}
});
};
const recursionExecDetection = () => {
if (urlList.value[0]["type"]) {
detectionInfo.value[urlList.value[0]["type"]].load = "loading";
detectionInfo.value[urlList.value[0]["type"]].btuDisable = true;
detectionInfo.value[urlList.value[0]["type"]].detectionState = "";
} else {
detectionInfo.value[urlList.value[0]["url"]].load = "loading";
detectionInfo.value[urlList.value[0]["url"]].btuDisable = true;
detectionInfo.value[urlList.value[0]["url"]].detectionState = "";
}
reqState.value = true;
apiByModel(
{
url: urlList.value[0]["url"],
ecuId: ebikeInfo.value.ecuId,
bikeId: ebikeInfo.value.bikeId,
ecuSn: ebikeInfo.value.ecuSn,
},
(res) => {
console.log(res);
if (res.code !== 200) {
showModelMessage(res.message);
}
if (urlList.value[0]["type"]) {
api
.callEcuCoreApi(
"gpsMsg" + "?ecuSn=" + ebikeInfo.value.ecuSn,
{},
"get"
)
.then((res) => {
detectionInfo.value[urlList.value[0]["type"]].load = "";
reqState.value = false;
detectionInfo.value[urlList.value[0]["type"]].btuDisable = false;
if (urlList.value[0]["type"] == "gps") {
detectionInfo.value[urlList.value[0]["type"]].msg =
"东经:" +
res.data.longitude +
"°,北纬:" +
res.data.latitude +
"°";
} else {
detectionInfo.value[urlList.value[0]["type"]].msg =
res.data[urlList.value[0]["type"]];
}
detectionInfo.value[urlList.value[0]["type"]].detectionState = true;
urlList.value.shift();
if (urlList.value.length > 0) {
recursionExecDetection();
}
});
} else {
detectionInfo.value[urlList.value[0]["url"]].load = "";
reqState.value = false;
detectionInfo.value[urlList.value[0]["url"]].btuDisable = false;
detectionInfo.value[urlList.value[0]["url"]].msg = res.data.message;
if (res.data.code == 200) {
detectionInfo.value[urlList.value[0]["url"]].detectionState =
"success";
} else {
detectionInfo.value[urlList.value[0]["url"]].detectionState = "error";
}
urlList.value.shift();
if (urlList.value.length > 0) {
recursionExecDetection();
}
}
}
);
};
const apiByModel = (params, callback) => {
const { url, ecuId, bikeId, ecuSn } = params;
if (modelShow.value) {
api
.callEcuCoreApi(url + "?" + "ecuSn" + "=" + ecuSn, {}, "get")
.then((res) => {
callback(res);
});
} else {
api
.callCoreApi(
url + "?" + "ecuId" + "=" + ecuId + "&bikeId=" + bikeId,
{},
"get"
)
.then((res) => {
callback(res);
});
}
};
const autoDetection = () => {
urlList.value = [
{
url: "online",
},
{
url: "gps",
type: "gps",
},
{
url: "gps",
type: "soc",
},
{
url: "gps",
type: "voltage",
},
{
url: "openBatteryLock",
},
{
url: "unlock",
},
{
url: "openHelmet",
},
{
url: "lock",
},
{
url: "findEbike",
},
{
url: "powerOff",
},
{
url: "cancelAntiTheft",
},
];
recursionExecDetection();
};
</script>
<style>
.container {
padding: 5px;
background-color: #f8f8f8;
}
.cuIcon-order {
font-family: "cuIcon";
font-size: 22px;
font-style: normal;
padding: 8px 0 0 0;
}
.zk-title {
width: 30%;
padding: 8px 0 0 0;
font-size: 14px;
}
.zk-state {
width: 50%;
display: flex;
flex-direction: column;
justify-content: center;
height: 35px;
}
.uni-forms-item {
position: relative;
display: flex;
flex-direction: row;
margin-bottom: 0px !important;
}
.uni-load-more {
display: flex;
flex-direction: row;
height: 40px;
align-items: center;
justify-content: left !important;
}
.uni-load-more__text {
font-size: 12px !important;
margin-left: 8px;
}
.zk-but {
width: 20%;
}
.form-panel {
padding-bottom: 55px;
}
.nav-panel {
position: fixed;
bottom: 0rpx;
width: 100%;
padding-bottom: 20px;
background-color: #fff;
z-index: 10;
}
</style>