Compare commits

...

3 Commits

Author SHA1 Message Date
lnljyang
47d456433e gjt适配版地图 2026-01-20 16:35:30 +08:00
lnljyang
51b927d29a 地图BUG修改 2026-01-09 13:19:13 +08:00
lnljyang
b1128b9adf 因为主包大于1.5 删除审核模块 2026-01-09 13:19:06 +08:00
4 changed files with 455 additions and 1393 deletions

View File

@@ -118,22 +118,6 @@
"onReachBottomDistance": 50 "onReachBottomDistance": 50
} }
}, },
{
"path": "pages/audit/index",
"style": {
"navigationBarTitleText": "在线审批",
"enablePullDownRefresh": true,
"onReachBottomDistance": 50
}
},
{
"path": "pages/audit/detail",
"style": {
"navigationBarTitleText": "合同审批详情",
"enablePullDownRefresh": true,
"onReachBottomDistance": 50
}
},
{ {
"path": "pages/unusualActionApply/index", "path": "pages/unusualActionApply/index",
"style": { "style": {

File diff suppressed because it is too large Load Diff

View File

@@ -1,290 +0,0 @@
<template>
<view>
<u-sticky>
<view style="background-color: #fff">
<u-subsection
mode="subsection"
:list="list"
:current="current"
@change="sectionChange"
activeColor="#7ba746"
:fontSize="30"
>
</u-subsection>
</view>
<u-search
placeholder="请输入"
v-model="keyword"
:showAction="false"
@search="searchList()"
></u-search>
</u-sticky>
<view class="list">
<view class="item" v-for="item in dataList" :key="item.id">
<view class="line">
<view class="text-normal" v-if="current == 0 || item.approvalName"
>@{{ item.approvalName }}请处理待处理审批单:
</view>
</view>
<view class="block">
<view class="line">
<view class="text-small">
{{ item.createName }}提交的{{ item.contractTypeName }}申请</view
>
</view>
<view class="line">
<view class="text-small"> {{ item.customerName }}</view>
</view>
<view class="line">
<view class="text-small">等待</view>
<view class="text-small hot">{{ item.waitTime || "--" }}</view>
<view class="text-small">小时</view>
</view>
</view>
<view class="line" style="justify-content: flex-end">
<view class="buttons">
<!--deliveryPermit为1的时候准许交车 -->
<button
@tap="goto"
v-if="current == 0"
:data-url="`/pages/audit/detail?id=${item.id}`"
>
处理
</button>
<button
v-else
@tap="goto"
:data-url="`/pages/audit/detail?id=${item.id}&isRead=1`"
>
查看
</button>
</view>
</view>
<view class="line">
<view class="line" style="justify-content: space-between">
<view class="text-small left"
>合同提交时间: {{ formatDateTime(item.createTime) }}</view
>
</view>
</view>
</view>
<view class="no-more" v-if="noMoreData">没有更多数据了</view>
</view>
<view
clas="line"
style="margin-top: 150rpx"
v-if="!dataList || dataList.length === 0"
>
<u-empty mode="search" text="暂无数据" width="400" textSize="16">
</u-empty
></view>
<u-loading-page
bg-color="#ffffff"
:loading="loading"
color="#7ba746"
font-size="24"
></u-loading-page>
</view>
</template>
<script>
import stora from "@/utils/storage";
export default {
options: {
styleIsolation: "shared", // 解除样式隔离
},
data() {
return {
keyword: "",
current: 0,
list: ["待审批", "审批通过"],
queryPage: {
pageNo: 1, // 页码
pageSize: 10, //每页查询条数
total: 0, //总页数
pages: -1, //总页数
// contractStatus: "2", // 交车许可 1表示 准许交车
},
dataList: [],
pageNo: 1,
noMoreData: false,
loading: false,
};
},
methods: {
// 新增的搜索方法
searchList() {
this.queryPage.customerName = this.keyword.trim(); // 设置车牌号条件
this.queryPage.pageNo = 1; // 重置页码为1
this.dataList = []; // 清空数据列表
this.noMoreData = false; // 重置没有更多数据的标志
this.loadmore(); // 重新加载数据
},
sectionChange(index) {
this.queryPage.customerName = "";
this.keyword = "";
this.current = index;
// if (index == 1) {
// // 全部 (准许交车 + 已交车)
// this.queryPage.contractStatus = "3";
// } else {
// // 仅显示准许交车
// this.queryPage.contractStatus = "2";
// }
this.queryPage.pageNo = 1;
this.dataList = [];
this.loadmore();
},
formatDateTime(obj) {
if (obj == null) {
return "";
}
let date = new Date(obj);
let y = 1900 + date.getYear();
let m = "0" + (date.getMonth() + 1);
let d = "0" + date.getDate();
return (
y +
"-" +
m.substring(m.length - 2, m.length) +
"-" +
d.substring(d.length - 2, d.length)
);
},
loadmore() {
this.loading = true;
if (this.current == 0) {
this.$api.audit
.queryAuditList(this.queryPage)
.then((res) => {
console.log(res);
this.queryPage.pageNo = res.data.current;
this.queryPage.pages = res.data.pages;
this.queryPage.total = res.data.total;
this.dataList.push(...(res.data.records || []));
this.loading = false;
})
.catch((errors) => {
this.loading = false;
});
} else {
this.$api.audit
.queryAuditedList(this.queryPage)
.then((res) => {
console.log(res);
this.queryPage.pageNo = res.data.current;
this.queryPage.pages = res.data.pages;
this.queryPage.total = res.data.total;
this.dataList.push(...(res.data.records || []));
this.loading = false;
})
.catch((errors) => {
this.loading = false;
});
}
},
goto(e) {
uni.navigateTo({ url: e.target.dataset.url });
},
},
onLoad() {},
onPullDownRefresh() {
this.sectionChange(this.current);
uni.stopPullDownRefresh(); //刷新数据之后停止刷新效果
},
destroyed() {
//页面销毁删除掉数据缓存
stora.remove("fault_fromData");
},
onReachBottom() {
console.log("触底了");
//当前页数小于总页数
if (this.queryPage.pageNo < this.queryPage.pages) {
this.queryPage.pageNo++;
this.loadmore();
} else {
this.noMoreData = true;
console.log("没有更多数据了");
}
},
onShow() {
this.sectionChange(this.current);
},
};
</script>
<style lang="less" scoped>
/deep/ .u-search {
background: #d7d7d7 !important;
padding: 20rpx 10rpx !important;
}
// /deep/ .u-search__content__input {
// height: 50rpx !important;
// padding-top: 20rpx !important; /* 上边距 */
// padding-bottom: 20rpx !important; /* 下边距 */
// }
.list {
background: #d7d7d7;
padding: 0 20px 20rpx;
.item {
background: white;
padding: 20rpx;
margin-bottom: 20rpx;
position: relative;
border-radius: 15rpx;
.block {
display: flex;
line-height: 1.5;
padding: 10px;
flex-direction: column;
align-items: left;
margin-bottom: 15rpx;
border: 1px solid #ccc;
}
.hot {
color: red;
}
.line {
display: flex;
align-items: center;
margin-bottom: 15rpx;
.left {
margin-right: 50rpx;
width: 300rpx;
}
.text-small {
font-size: x-small;
}
.text-normal {
font-size: small;
}
}
.buttons {
button {
width: 130rpx;
display: inline-block;
height: 50rpx;
padding: 12rpx 0;
font-size: 26rpx;
line-height: 26rpx;
margin-bottom: 10rpx;
}
}
}
.no-more {
width: 100%;
text-align: center;
font-size: xx-small;
color: white;
}
}
</style>

View File

@@ -63,7 +63,7 @@
</view> </view>
<ba-tree-picker <ba-tree-picker
ref="treePicker" ref="treePicker"
:isShowOrgPicker="_showOrgPicker" :isShowOrgPicker="false"
@select-change="selectChange" @select-change="selectChange"
@emitOrgId="emitOrgId" @emitOrgId="emitOrgId"
:title="` `" :title="` `"
@@ -80,7 +80,7 @@
@beforeleave="onBeforeLeave" @beforeleave="onBeforeLeave"
> >
<!-- @afterShow="onAfterShow" <!-- @afterShow="onAfterShow"
@afterHide="onAfterHide" --> @afterHide="onAfterHide" -->
<view class="right-panel" @tap.native.stop="banIosChuanTou"> <view class="right-panel" @tap.native.stop="banIosChuanTou">
<view class="panel-header"> <view class="panel-header">
<view class="panel-title" <view class="panel-title"
@@ -89,13 +89,14 @@
<view v-if="current === 0" <view v-if="current === 0"
>当前数量:{{ _clusterSelList.length || 0 }}()</view >当前数量:{{ _clusterSelList.length || 0 }}()</view
> >
<view v-else>当前数量:{{ _clusterSelList.length || 0 }}()</view>
<view class="close-btn" @tap="checkListShow = false"> <view class="close-btn" @tap="checkListShow = false">
<u-icon name="close" color="#333" size="22"></u-icon> <u-icon name="close" color="#333" size="22"></u-icon>
</view> </view>
</view> </view>
<view v-if="current === 0" class="tableOption"> <view v-if="current === 0" class="tableOption">
<view class="optionItem"> <view class="optionItem">
<view <!-- <view
class="item right-u-popup u-border" class="item right-u-popup u-border"
style="border-radius: 4px" style="border-radius: 4px"
> >
@@ -127,7 +128,7 @@
</view> </view>
</template> </template>
</u-input> </u-input>
</view> </view> -->
<view <view
class="item right-u-popup u-border" class="item right-u-popup u-border"
style="border-radius: 4px" style="border-radius: 4px"
@@ -150,8 +151,41 @@
</template> </template>
</u-input> </u-input>
</view> </view>
<view
class="item right-u-popup u-border"
style="border-radius: 4px; flex: 1"
>
<u-picker
:show="showTruckTypePicker"
:columns="[_truckTypeList]"
keyName="nameAndCount"
@confirm="confirmTruckType"
:immediateChange="true"
@cancel="showTruckTypePicker = false"
>
</u-picker>
<u-input
v-model="truckTypeName"
border="surround"
:disabledColor="'#ffffff'"
style="font-size: 13px"
disabled
placeholder="请选择车辆型号"
@tap="showTruckTypePicker = true"
>
<template slot="suffix">
<view
class="close-btn"
v-if="truckTypeName"
@tap.stop="clearClickTruckType"
>
<u-icon name="close" color="#333" size="20"></u-icon>
</view>
</template>
</u-input>
</view>
</view> </view>
<view class="optionItem"> <!-- <view class="optionItem">
<view <view
class="item right-u-popup u-border" class="item right-u-popup u-border"
style="border-radius: 4px" style="border-radius: 4px"
@@ -218,9 +252,38 @@
</template> </template>
</u-input> </u-input>
</view> </view>
</view> -->
<view class="optionItem">
<!-- 占位的空div保持布局一致性 -->
<view
v-if="
current === 0 &&
isMapResetForTruck &&
hasClickedBackRightForTruck
"
class="item"
style="flex: 1"
></view>
<view
v-if="
current === 0 &&
!isMapResetForTruck &&
!hasClickedBackRightForTruck
"
class="item"
style="display: flex; align-items: center"
>
全部车辆:
<u-switch
size="58"
activeColor="#2F6D47"
v-model="allTruckSwitch"
@change="changeSwitch"
></u-switch>
</view>
</view> </view>
</view> </view>
<view v-else class="tableOption"> <view v-else class="tableOption" style="padding-top: 10px">
<view class="optionItem"> <view class="optionItem">
<view <view
class="item right-u-popup u-border" class="item right-u-popup u-border"
@@ -255,9 +318,33 @@
</template> </template>
</u-input> </u-input>
</view> </view>
<view
v-if="
current === 1 &&
!isMapResetForHydrogen &&
!hasClickedBackRightForHydrogen
"
class="item"
style="display: flex; align-items: center"
>
全部加氢站:
<u-switch
size="58"
activeColor="#2F6D47"
v-model="allHydrogenSwitch"
@change="changeSwitchHydrogen"
></u-switch>
</view>
</view> </view>
</view> </view>
<scroll-view scroll-y="true" style="height: calc(100vh - 200px)"> <scroll-view
ref="scrollView"
scroll-y="true"
:scroll-top="scrollTop"
style="height: calc(100vh - 200px)"
@scrolltolower="loadMoreData"
@scroll="onScroll"
>
<view class="rightPop"> <view class="rightPop">
<view <view
v-if="current === 0" v-if="current === 0"
@@ -303,11 +390,11 @@
<view class="demo-layout">仪表盘</view> <view class="demo-layout">仪表盘</view>
</u-col> </u-col>
<u-col span="3"> <u-col span="3">
<view class="demo-layout">部门</view> <view class="demo-layout">车型</view>
</u-col> </u-col>
</u-row> </u-row>
<view <view
v-for="(item, index) in _clusterSelList" v-for="(item, index) in virtualClusterList"
class="clusterItem" class="clusterItem"
:key="index" :key="index"
> >
@@ -346,10 +433,39 @@
</view> </view>
</view> </view>
<view class="item" v-if="current === 0">{{ <view class="item" v-if="current === 0">{{
item.shortDepName || "--" item.noticeModel || "--"
}}</view> }}</view>
</view> </view>
</view> </view>
<!-- 虚拟滚动加载控制 -->
<view
v-if="
virtualClusterList.length > 0 &&
_clusterSelList.length > virtualScrollPageSize
"
class="load-more-controls"
>
<view class="load-more-info">
已加载 {{ virtualClusterList.length }} /
{{ _clusterSelList.length }} 条
</view>
<view v-if="virtualScrollHasMore" class="load-more-button">
<view
class="load-more-btn"
:class="{ loading: virtualScrollLoading }"
@tap="loadMoreData"
>
<text v-if="!virtualScrollLoading">加载更多</text>
<view v-else class="loading-content">
<text class="loading-text">加载中</text>
<text class="loading-dot">.</text>
<text class="loading-dot">.</text>
<text class="loading-dot">.</text>
</view>
</view>
</view>
<view v-else class="no-more-data"> 已加载全部数据 </view>
</view>
<!-- <view>查看详细分布</view> --> <!-- <view>查看详细分布</view> -->
</view> </view>
</scroll-view> </scroll-view>
@@ -368,7 +484,6 @@
@tap="resetMap" @tap="resetMap"
></image> ></image>
<image <image
v-if="clusterSelList && clusterSelList.length > 0"
src="/static/expand-left-line.png" src="/static/expand-left-line.png"
style=" style="
position: absolute; position: absolute;
@@ -403,14 +518,14 @@
<cover-view class="popup" v-if="showPopup"> <cover-view class="popup" v-if="showPopup">
<cover-view class="popup-header"> <cover-view class="popup-header">
<!-- <cover-view style="display: flex" :show-location="true" <!-- <cover-view style="display: flex" :show-location="true"
><cover-image ><cover-image
:src=" :src="
current === 0 ? '/static/kachetou.png' : '/static/jiaqingzhan.png' current === 0 ? '/static/kachetou.png' : '/static/jiaqingzhan.png'
" "
style="width: 40rpx; height: 40rpx; margin: 5px" style="width: 40rpx; height: 40rpx; margin: 5px"
></cover-image ></cover-image
>1111</cover-view >1111</cover-view
> --> > -->
<cover-view style="display: flex; padding: 5px; flex: 1"> <cover-view style="display: flex; padding: 5px; flex: 1">
<cover-image <cover-image
:src=" :src="
@@ -419,7 +534,7 @@
style="width: 40rpx; height: 40rpx; margin-right: 5px" style="width: 40rpx; height: 40rpx; margin-right: 5px"
></cover-image> ></cover-image>
<cover-view style="flex: 1">{{ <cover-view style="flex: 1">{{
currMarker.plateNumber || currMarker.name currMarker.plateNumber || currMarker.shortName || currMarker.name
}}</cover-view> }}</cover-view>
<cover-image <cover-image
v-if="current === 0" v-if="current === 0"
@@ -449,7 +564,7 @@
</cover-view> </cover-view>
</cover-view> </cover-view>
<cover-view class="popup-content"> <cover-view class="popup-content">
<cover-view style="display: flex"> <cover-view style="display: flex; white-space: normal">
<u-icon <u-icon
name="map" name="map"
size="45" size="45"
@@ -473,6 +588,15 @@
</cover-view> </cover-view>
</cover-view> </cover-view>
<cover-view v-else> <cover-view v-else>
<cover-view
class="content-items"
style="text-align: left"
v-if="currMarker.shortName"
>
<cover-view style="flex: 1; white-space: normal">
加氢站全称:{{ currMarker.name || "--" }}
</cover-view>
</cover-view>
<cover-view class="content-items" style="text-align: left"> <cover-view class="content-items" style="text-align: left">
<cover-view style="flex: 1"> <cover-view style="flex: 1">
氢源:{{ currMarker.hydrogenSource || "--" }} 氢源:{{ currMarker.hydrogenSource || "--" }}
@@ -567,8 +691,27 @@ export default {
plateNumberInput: "", //车牌号输入框 plateNumberInput: "", //车牌号输入框
departList: [], //业务部门 departList: [], //业务部门
departName: "", //业务部门 departName: "", //业务部门
truckTypeList: [], //车辆类型
showDepartPicker: false, //是否业务部门选择器 showDepartPicker: false, //是否业务部门选择器
showTruckTypePicker: false, //是否车辆型号选择器
truckTypeName: "", //车辆型号名称
showAllVehicles: false, //是否显示全部车辆
originalClusterList: [], //保存切换前的clusterSelList
mileageSortOrder: "desc", // 行驶里程排序方向desc-从大到小asc-从小到大 mileageSortOrder: "desc", // 行驶里程排序方向desc-从大到小asc-从小到大
backRightTimer: null, // backRight方法的防抖定时器
allTruckSwitch: false, //是否显示全部车辆
allHydrogenSwitch: false, //是否显示全部加氢站
originalHydrogenList: [], //保存切换前的加氢站列表
virtualScrollPageSize: 150, // 虚拟滚动每页显示数量
virtualScrollCurrentPage: 1, // 虚拟滚动当前页码
virtualScrollTotalPages: 1, // 虚拟滚动总页数
virtualScrollLoading: false, // 是否正在加载下一页
virtualScrollHasMore: true, // 是否还有更多数据
scrollTop: 0, // 滚动位置
isMapResetForTruck: true, // 车辆是否为重置地图状态
isMapResetForHydrogen: true, // 加氢站是否为重置地图状态
hasClickedBackRightForTruck: false, // 车辆是否已经点击过backRight
hasClickedBackRightForHydrogen: false, // 加氢站是否已经点击过backRight
}; };
}, },
computed: { computed: {
@@ -578,6 +721,22 @@ export default {
"vehicle" //按钮在基础信息菜单的车辆信息下面 "vehicle" //按钮在基础信息菜单的车辆信息下面
); );
}, },
// 虚拟滚动显示的数据
virtualClusterList() {
const endIndex =
this.virtualScrollCurrentPage * this.virtualScrollPageSize;
return this._clusterSelList.slice(0, endIndex);
},
// 虚拟滚动总页数
virtualScrollTotalPages() {
return Math.ceil(
this._clusterSelList.length / this.virtualScrollPageSize
);
},
// 是否还有更多数据
virtualScrollHasMore() {
return this.virtualClusterList.length < this._clusterSelList.length;
},
_showOrgPicker() { _showOrgPicker() {
return this.chooseCompany && this.current === 0; return this.chooseCompany && this.current === 0;
}, },
@@ -608,6 +767,18 @@ export default {
}); });
return arr.filter((item) => item.carNumber) || []; return arr.filter((item) => item.carNumber) || [];
}, },
_truckTypeList() {
const arr = this.truckTypeList.map((item) => {
const carNumber =
this.clusterSelList.filter((t) => {
return t.noticeModel === item.dicName;
})?.length || 0;
item.carNumber = carNumber;
item.nameAndCount = item.dicName + " (" + carNumber + ")";
return item;
});
return arr.filter((item) => item.carNumber) || [];
},
_areaList() { _areaList() {
const arr = this.areaList.map((item) => { const arr = this.areaList.map((item) => {
const carNumber = const carNumber =
@@ -632,6 +803,8 @@ export default {
item.plateNumber?.toString().indexOf(this.areaName) > -1) && item.plateNumber?.toString().indexOf(this.areaName) > -1) &&
(this.departName === "" || (this.departName === "" ||
this.departName?.toString().indexOf(item.shortDepName) > 0) && this.departName?.toString().indexOf(item.shortDepName) > 0) &&
(this.truckTypeName === "" ||
item.noticeModel === this.truckTypeName) &&
(this.plateNumberInput === "" || (this.plateNumberInput === "" ||
item.plateNumber?.toString().indexOf(this.plateNumberInput) > item.plateNumber?.toString().indexOf(this.plateNumberInput) >
-1) -1)
@@ -661,11 +834,11 @@ export default {
onPullDownRefresh(event) {}, onPullDownRefresh(event) {},
mounted() { mounted() {
console.log("mounted"); console.log("mounted");
this.$store.state.current = "map";
this.sectionChange(this.current); this.sectionChange(this.current);
this.getOrgList(); this.getOrgList();
this.getAreaList(); this.getAreaList();
this.getDepartList(); this.getDepartList();
this.getTruckType();
this.getCoopList(); this.getCoopList();
// this.getVehicleMarkers(); // this.getVehicleMarkers();
//this.gotoMap(); //this.gotoMap();
@@ -676,15 +849,95 @@ export default {
clearTimeout(this.popTimer); clearTimeout(this.popTimer);
this.popTimer = null; this.popTimer = null;
} }
// 清理backRight防抖定时器
if (this.backRightTimer) {
clearTimeout(this.backRightTimer);
this.backRightTimer = null;
}
// 清理地图事件监听器 // 清理地图事件监听器
if (this._mapContext) { if (this._mapContext) {
this._mapContext.off("markerClusterCreate"); // 直接移除所有监听器,不需要传递回调函数
this._mapContext.off("markerClusterClick"); try {
this._mapContext.off("markerClusterCreate");
this._mapContext.off("markerClusterClick");
} catch (e) {
console.log("移除地图事件监听器失败:", e);
}
this._mapContext = null; this._mapContext = null;
} }
}, },
methods: { methods: {
changeSwitch(e) {
console.log("change", e);
if (e) {
// 开启开关,保存当前数据并显示全部
this.originalClusterList = [...this.clusterSelList];
this.clusterSelList = [...this.covers];
this.virtualScrollCurrentPage = 1; // 重置到第一页
this.$nextTick(() => {
this.resetScrollPosition();
});
} else {
// 关闭开关,恢复原始数据
this.clusterSelList = [...this.originalClusterList];
this.virtualScrollCurrentPage = 1; // 重置到第一页
this.$nextTick(() => {
this.resetScrollPosition();
});
}
},
changeSwitchHydrogen(e) {
console.log("changeSwitchHydrogen", e);
if (e) {
// 开启开关,保存当前数据并显示全部
this.originalHydrogenList = [...this.clusterSelList];
this.clusterSelList = [...this.covers];
this.virtualScrollCurrentPage = 1; // 重置到第一页
this.$nextTick(() => {
this.resetScrollPosition();
});
} else {
// 关闭开关,恢复原始数据
this.clusterSelList = [...this.originalHydrogenList];
this.virtualScrollCurrentPage = 1; // 重置到第一页
this.$nextTick(() => {
this.resetScrollPosition();
});
}
},
// 滚动事件处理
onScroll(e) {
if (this.virtualScrollLoading || !this.virtualScrollHasMore) return;
const { scrollTop, scrollHeight, clientHeight } = e.detail;
// 当滚动到三分之二位置时触发加载
const threshold = scrollHeight * (2 / 3);
if (scrollTop + clientHeight >= threshold) {
this.loadMoreData();
}
},
// 加载更多数据
loadMoreData() {
if (this.virtualScrollLoading || !this.virtualScrollHasMore) return;
this.virtualScrollLoading = true;
// 模拟网络延迟,实际项目中可以移除
setTimeout(() => {
this.virtualScrollCurrentPage++;
this.virtualScrollLoading = false;
}, 300);
},
// 重置滚动位置到顶部
resetScrollPosition() {
// 先设置为非0值再设置为0确保触发滚动
this.scrollTop = 1;
this.$nextTick(() => {
this.scrollTop = 0;
});
},
banIosChuanTou() { banIosChuanTou() {
// 阻止iOS事件穿透到地图 // 阻止iOS事件穿透到地图
console.log("阻止事件穿透"); console.log("阻止事件穿透");
@@ -715,6 +968,9 @@ export default {
clearClickDepart() { clearClickDepart() {
this.departName = ""; // 重置业务部门 this.departName = ""; // 重置业务部门
}, },
clearClickTruckType() {
this.truckTypeName = ""; // 重置车辆型号
},
clearClick() { clearClick() {
this.orgName = ""; // 重置组织名称 this.orgName = ""; // 重置组织名称
}, },
@@ -752,6 +1008,12 @@ export default {
this.areaList = res || []; this.areaList = res || [];
}); });
}, },
getTruckType() {
this.truckTypeName = "";
this.$api.standbyVehicle.getTruckType().then((res) => {
this.truckTypeList = res || [];
});
},
getDepartList() { getDepartList() {
this.departName = ""; // this.departName = ""; //
this.$api.map.getOwnDepartDic().then((res) => { this.$api.map.getOwnDepartDic().then((res) => {
@@ -771,6 +1033,12 @@ export default {
this.departName = e.value[0].dicName; this.departName = e.value[0].dicName;
console.log(this.areaName); console.log(this.areaName);
}, },
confirmTruckType(e) {
console.log("confirmTruckType:\n", e.value[0]);
this.showTruckTypePicker = false;
this.truckTypeName = e.value[0].dicName;
},
clearClickCoop() { clearClickCoop() {
this.CoopName = ""; this.CoopName = "";
this.CoopCode = ""; this.CoopCode = "";
@@ -789,18 +1057,57 @@ export default {
this.showCoopPicker = false; this.showCoopPicker = false;
}, },
resetMap() { resetMap() {
this.isMapResetForTruck = true;
this.isMapResetForHydrogen = true;
this.hasClickedBackRightForTruck = false;
this.hasClickedBackRightForHydrogen = false;
this.sectionChange(this.current, {}); this.sectionChange(this.current, {});
}, },
backRight() { backRight() {
if (this.clusterSelList && this.clusterSelList.length > 0) { // 防抖处理
//this.includePoints = this.clusterSelList; //返回聚合点视图 if (this.backRightTimer) {
this.checkListShow = true; clearTimeout(this.backRightTimer);
this._mapContext.includePoints({
points: this.clusterSelList,
padding: [50, 50, 50, 50],
});
this.showPopup = false; //关闭底部弹窗
} }
this.backRightTimer = setTimeout(() => {
this.executeBackRight();
}, 300);
},
executeBackRight() {
if (!this.clusterSelList || this.clusterSelList.length === 0) {
this.clusterSelList = this.covers;
}
// 如果是重置地图后第一次点击backRight隐藏对应的switch
if (
this.current === 0 &&
this.isMapResetForTruck &&
!this.hasClickedBackRightForTruck
) {
this.hasClickedBackRightForTruck = true;
} else if (
this.current === 1 &&
this.isMapResetForHydrogen &&
!this.hasClickedBackRightForHydrogen
) {
this.hasClickedBackRightForHydrogen = true;
}
this.checkListShow = true;
this._mapContext.includePoints({
points: this.clusterSelList,
padding: [50, 50, 50, 50],
});
this.showPopup = false; //关闭底部弹窗
this.resetScrollPosition(); // 重置滚动位置
// if (this.clusterSelList && this.clusterSelList.length > 0) {
// //this.includePoints = this.clusterSelList; //返回聚合点视图
// this.checkListShow = true;
// this._mapContext.includePoints({
// points: this.clusterSelList,
// padding: [50, 50, 50, 50],
// });
// this.showPopup = false; //关闭底部弹窗
// }
}, },
// 显示选择器 // 显示选择器
async showPicker() { async showPicker() {
@@ -1144,6 +1451,19 @@ export default {
hydrogenStationName: "", hydrogenStationName: "",
hydrogenStationId: "", hydrogenStationId: "",
}; };
// 重置switch状态
this.allTruckSwitch = false;
this.allHydrogenSwitch = false;
// 重置对应视图的首次点击状态
if (index === 0) {
this.isMapResetForTruck = true;
this.hasClickedBackRightForTruck = false;
} else {
this.isMapResetForHydrogen = true;
this.hasClickedBackRightForHydrogen = false;
}
let obj = params || undefined; let obj = params || undefined;
if (index === 0) { if (index === 0) {
await this.getVehicleMarkers(obj); await this.getVehicleMarkers(obj);
@@ -1154,8 +1474,12 @@ export default {
createMapContext() { createMapContext() {
// 清理之前的地图上下文,防止重复创建 // 清理之前的地图上下文,防止重复创建
if (this._mapContext) { if (this._mapContext) {
this._mapContext.off("markerClusterCreate"); try {
this._mapContext.off("markerClusterClick"); this._mapContext.off("markerClusterCreate");
this._mapContext.off("markerClusterClick");
} catch (e) {
console.log("移除地图事件监听器失败:", e);
}
this._mapContext = null; this._mapContext = null;
} }
@@ -1233,15 +1557,34 @@ export default {
//点击聚合簇时,清除筛选条件 //点击聚合簇时,清除筛选条件
this.orgName = ""; this.orgName = "";
this.areaName = ""; this.areaName = "";
this.truckTypeName = "";
this.allTruckSwitch = false; // 重置显示全部开关
} else { } else {
this.CoopName = ""; this.CoopName = "";
this.CoopCode = ""; this.CoopCode = "";
this.allHydrogenSwitch = false; // 重置显示全部加氢站开关
} }
const numCluster = res.cluster.markerIds.map((item) => Number(item)); const numCluster = res.cluster.markerIds.map((item) => Number(item));
this.clusterSelList = this.clusterSelList =
this.covers.filter((item) => numCluster.includes(item.hashCode)) || this.covers.filter((item) => numCluster.includes(item.hashCode)) ||
[]; [];
// 重置switch状态因为现在有具体的clusterSelList了
this.allTruckSwitch = false;
this.allHydrogenSwitch = false;
// 设置为非重置地图状态,只重置当前视图的状态
if (this.current === 0) {
this.isMapResetForTruck = false;
this.hasClickedBackRightForTruck = false;
} else {
this.isMapResetForHydrogen = false;
this.hasClickedBackRightForHydrogen = false;
}
this.virtualScrollCurrentPage = 1; // 重置到第一页
this.resetScrollPosition(); // 重置滚动位置
console.log("聚合簇点击", this.clusterSelList); console.log("聚合簇点击", this.clusterSelList);
}); });
}, },
@@ -1272,7 +1615,7 @@ export default {
iconPath = item.cooperate iconPath = item.cooperate
? `/static/maph.png` ? `/static/maph.png`
: `/static/maph2.png`; : `/static/maph2.png`;
calloutText = item.stationName; calloutText = item.shortName || item.stationName;
break; break;
} }
// let flag = false; // let flag = false;
@@ -1624,6 +1967,7 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
text-align: center; text-align: center;
margin: 8rpx;
font-size: 24rpx; font-size: 24rpx;
.item { .item {
flex: 1; flex: 1;
@@ -1636,5 +1980,81 @@ export default {
} }
} }
} }
// 虚拟滚动加载样式
.load-more-controls {
display: flex;
flex-direction: column;
align-items: center;
padding: 12px 0;
background-color: #f8f9fa;
border-top: 1px solid #e9ecef;
.load-more-info {
font-size: 12px;
color: #999;
margin-bottom: 8px;
}
.load-more-button {
.load-more-btn {
padding: 6px 20px;
font-size: 12px;
background-color: #f0f0f0;
color: #666;
border-radius: 15px;
border: none;
transition: all 0.3s ease;
&.loading {
background-color: #f0f0f0;
color: #999;
.loading-content {
display: flex;
align-items: center;
.loading-text {
margin-right: 2px;
}
.loading-dot {
animation: loadingDot 1.4s infinite ease-in-out both;
&:nth-child(2) {
animation-delay: -0.32s;
}
&:nth-child(3) {
animation-delay: -0.16s;
}
}
}
}
&:active {
background-color: #e0e0e0;
transform: scale(0.98);
}
}
}
.no-more-data {
font-size: 12px;
color: #bbb;
padding: 6px 0;
}
}
@keyframes loadingDot {
0%,
80%,
100% {
opacity: 0.3;
}
40% {
opacity: 1;
}
}
} }
</style> </style>