feat:新增新功能模块

This commit is contained in:
5g0Wp7Zy 2025-08-12 11:45:30 +08:00
parent afa8e95895
commit 556ea2f59c
11 changed files with 788 additions and 273 deletions

View File

@ -24,7 +24,7 @@ export default {
.then((res) => {
if (res.code == 200) {
// let url = "/pages/devops/ebikeinfo/ebikeinfo";
// let url = "/pages/warehouse/carDispatchByMine/carDispatchByMine";
// let url = "/pages/warehouse/maintainOrder/maintainOrderList";
// let url = "/pages/mine/mine";
let url = "/pages/home/home";
setTimeout(() => {
@ -47,3 +47,4 @@ export default {
@import "./colorui/icon.css";
@import "./common/uni-main.scss";
</style>

View File

@ -358,6 +358,23 @@
}
]
},
{
"root": "pages/warehouse/maintainOrder",
"pages": [
{
"path": "maintainOrderList",
"style": {
"navigationBarTitleText": "维修接单列表"
}
},
{
"path": "maintainOrderDetail",
"style": {
"navigationBarTitleText": "维修接单详情"
}
}
]
},
{
"root": "pages/devops/bikesite",
"pages": [

View File

@ -1,283 +1,323 @@
<template>
<view class="container">
<view class="query-selector">
<view class="query-option" :class="{ 'query-select': selectedOption === option.value }"
v-for="(option, index) in options" :key="index" @click="selectOption(option.value)">
{{ option.name }}
</view>
</view>
<view class="">
<uni-search-bar v-model="searchValue" @blur="blur" @clear="clearSearch" @cancel="cancel"
placeholder="输入车辆编号" clearButton="always" cancelButton="always">
</uni-search-bar>
</view>
<z-paging ref="paging" :fixed="false" height="85vh" v-model="dataList" @query="loadMoreData"
:default-page-no="1" :default-page-size="4" :auto-show-back-to-top="true">
<view v-for="(item,index) in dataList" :key="index">
<uni-card>
<template v-slot:title>
<view class="flex justify-between cardtitle">
<view class="flex align-center ">
<view class="cardtitleri">
{{item.orderTypeName}}
</view>
<!-- <view style="margin-left: 10px;">
<view class="container">
<view class="query-selector">
<view
class="query-option"
:class="{ 'query-select': selectedOption === option.value }"
v-for="(option, index) in options"
:key="index"
@click="selectOption(option.value)"
>
{{ option.name }}
</view>
</view>
<view class="">
<uni-search-bar
v-model="searchValue"
@blur="blur"
@clear="clearSearch"
@cancel="cancel"
placeholder="输入车辆编号"
clearButton="always"
cancelButton="always"
>
</uni-search-bar>
</view>
<z-paging
ref="paging"
:fixed="false"
height="85vh"
v-model="dataList"
@query="loadMoreData"
:default-page-no="1"
:default-page-size="4"
:auto-show-back-to-top="true"
>
<view v-for="(item, index) in dataList" :key="index">
<uni-card>
<template v-slot:title>
<view class="flex justify-between cardtitle">
<view class="flex align-center">
<view class="cardtitleri">
{{ item.orderTypeName }}
</view>
<!-- <view style="margin-left: 10px;">
<view class="cu-tag radius line-green"
style="background-color:rgba(203,240,204,0.4);">图标</view>
</view> -->
</view>
<view>
<uni-icons @click="gotoPage(item.orderType,item)" type="right" size="20"></uni-icons>
</view>
</view>
</template>
<uni-forms>
<!-- <uni-forms-item v-if="item.longitude &&item.longitude !=''" label="">
</view>
<view>
<uni-icons
@click="gotoPage(item.orderType, item)"
type="right"
size="20"
></uni-icons>
</view>
</view>
</template>
<uni-forms>
<!-- <uni-forms-item v-if="item.longitude &&item.longitude !=''" label="">
<view class="deepBlackBoldText">
{{getAreaByCoordinates(item.longitude,item.latitude)}}
</view>
</uni-forms-item> -->
<uni-forms-item v-if="item.bikeCode && item.bikeCode !='' " label="车辆编号">
<view class="deepBlackBoldText">
<span style="color: rgb(19,131,255);"
@click="gotoebikeInfo(item.bikeCode)">{{item.bikeCode}}</span>
</view>
</uni-forms-item>
<uni-forms-item v-if="item.bikeCount && item.bikeCount !='' " label="车辆数量">
<view class="deepBlackBoldText">
{{item.bikeCount}}
</view>
</uni-forms-item>
<uni-forms-item v-if="item.dispatchType && item.dispatchType !='' " label="调度类型">
<view class="deepBlackBoldText">
{{item.dispatchType}}
</view>
</uni-forms-item>
<uni-forms-item label="创建时间">
<view class="deepBlackBoldText">
{{item.createdAt}}
</view>
</uni-forms-item>
</uni-forms>
</uni-card>
</view>
</z-paging>
</view>
<zero-loading v-if="isloading" color="#c1c1c0" type="pulse" mask="true"></zero-loading>
<uni-forms-item
v-if="item.bikeCode && item.bikeCode != ''"
label="车辆编号"
>
<view class="deepBlackBoldText">
<span
style="color: rgb(19, 131, 255)"
@click="gotoebikeInfo(item.bikeCode)"
>{{ item.bikeCode }}</span
>
</view>
</uni-forms-item>
<uni-forms-item
v-if="item.bikeCount && item.bikeCount != ''"
label="车辆数量"
>
<view class="deepBlackBoldText">
{{ item.bikeCount }}
</view>
</uni-forms-item>
<uni-forms-item
v-if="item.dispatchType && item.dispatchType != ''"
label="调度类型"
>
<view class="deepBlackBoldText">
{{ item.dispatchType }}
</view>
</uni-forms-item>
<uni-forms-item label="创建时间">
<view class="deepBlackBoldText">
{{ item.createdAt }}
</view>
</uni-forms-item>
</uni-forms>
</uni-card>
</view>
</z-paging>
</view>
<zero-loading
v-if="isloading"
color="#c1c1c0"
type="pulse"
mask="true"
></zero-loading>
</template>
<script setup>
import AMapWX from "@/utils/amap-wx.130.js";
import * as map from "@/utils/map.js";
import {
ref,
onMounted
} from 'vue';
import * as api from '@/utils/api.js';
import config from '@/utils/config';
import {
onLoad,onShow
} from '@dcloudio/uni-app';
import AMapWX from "@/utils/amap-wx.130.js";
import * as map from "@/utils/map.js";
import { ref, onMounted } from "vue";
import * as api from "@/utils/api.js";
import config from "@/utils/config";
import { onLoad, onShow } from "@dcloudio/uni-app";
const isCancelOrClear = ref(false);
const isCancelOrClear = ref(false);
const isloading = ref(false);
var amapsdk = new AMapWX({
key: map.sdkKey
});
const dataList = ref([]);
const scrollHeight = ref(null);
const paging = ref(null);
const userInfo = ref(null);
const searchValue = ref("");
const options = ref([{
name: "全部",
value: ''
},
{
name: "换电",
value: '2'
},
{
name: "调度",
value: '3'
},
{
name: "维修",
value: '1'
}
]);
const selectedOption = ref("");
onLoad((options) => {
const systemInfo = uni.getSystemInfoSync();
userInfo.value = uni.getStorageSync('userInfo');
const screenHeight = systemInfo.screenHeight;
const statusBarHeight = systemInfo.statusBarHeight;
scrollHeight.value = screenHeight - statusBarHeight;
});
const isloading = ref(false);
var amapsdk = new AMapWX({
key: map.sdkKey,
});
const dataList = ref([]);
const scrollHeight = ref(null);
const paging = ref(null);
const userInfo = ref(null);
const searchValue = ref("");
const options = ref([
{
name: "全部",
value: "",
},
{
name: "换电",
value: "2",
},
{
name: "调度",
value: "3",
},
{
name: "维修",
value: "1",
},
]);
const selectedOption = ref("");
onLoad((options) => {
const systemInfo = uni.getSystemInfoSync();
userInfo.value = uni.getStorageSync("userInfo");
const screenHeight = systemInfo.screenHeight;
const statusBarHeight = systemInfo.statusBarHeight;
scrollHeight.value = screenHeight - statusBarHeight;
});
const loadMoreData = (pageNo, pageSize) => {
const loadMoreData = (pageNo, pageSize) => {
const params = {
orderType: selectedOption.value,
bikeCode: searchValue.value,
pageParam: {
pageNum: pageNo,
pageSize: pageSize,
},
};
api.callEbikeInfo("getWorkOrderList", params).then((res) => {
if (res.code === 200) {
const records = res.data.records;
paging.value.complete(records);
} else {
paging.value.complete([]);
}
});
};
const params = {
"orderType": selectedOption.value,
"bikeCode": searchValue.value,
"pageParam": {
"pageNum": pageNo,
"pageSize": pageSize
}
};
api.callEbikeInfo("getWorkOrderList", params).then((res) => {
if (res.code === 200) {
const records = res.data.records;
paging.value.complete(records);
} else {
paging.value.complete([]);
}
});
};
const selectOption = (option) => {
selectedOption.value = option;
paging.value.reload();
};
const blur = (res) => {
if (res.value != searchValue.value) {
paging.value.reload();
}
};
onShow(() => {
searchValue.value = "";
loadMoreData(1, 4);
});
const cancel = (value) => {
// api.callEbikeInfo("getVehicleDetailsByRegionId?regionId=275024268783185920",{},"get")
searchValue.value = "";
paging.value.reload();
};
const clearSearch = (value) => {
searchValue.value = "";
paging.value.reload();
};
const getAreaByCoordinates = (lng, lat) => {
map.reverseGeocoder(
amapsdk,
lng,
lat,
(res) => {
const { address } = res;
return address;
},
(res) => {
return "";
}
);
};
const gotoebikeInfo = (bikeCode) => {
isloading.value = true;
api.callEbikeInfo("getBikeINfoData?bikeCode=" + bikeCode).then((res) => {
if (res.code == 200) {
const bikeId = res.data.bikeId;
const ecuId = res.data.ecuId;
const ecuSn = res.data.ecuSn;
uni.navigateTo({
url:
"/pages/devops/ebikeinfo/ebikeinfo?bikeId=" +
bikeId +
"&ecuId=" +
ecuId +
"&ecuSn=" +
ecuSn,
});
setTimeout(() => {
isloading.value = false;
}, 500);
}
});
};
const selectOption = (option) => {
selectedOption.value = option;
paging.value.reload();
};
const blur = (res) => {
if (res.value != searchValue.value) {
paging.value.reload();
};
};
onShow(() => {
searchValue.value = "";
loadMoreData(1,4)
})
const cancel = (value) => {
// api.callEbikeInfo("getVehicleDetailsByRegionId?regionId=275024268783185920",{},"get")
searchValue.value = "";
paging.value.reload();
}
const clearSearch = (value) => {
searchValue.value = "";
paging.value.reload();
}
const getAreaByCoordinates = (lng, lat) => {
map.reverseGeocoder(amapsdk, lng, lat, (res) => {
const {
address
} = res
return address;
}, (res) => {
return "";
});
}
const gotoebikeInfo = (bikeCode) => {
isloading.value = true;
api.callEbikeInfo("getBikeINfoData?bikeCode=" + bikeCode).then((res) => {
if (res.code == 200) {
const bikeId = res.data.bikeId;
const ecuId = res.data.ecuId;
const ecuSn = res.data.ecuSn;
uni.navigateTo({
url: "/pages/devops/ebikeinfo/ebikeinfo?bikeId=" + bikeId + "&ecuId=" + ecuId +
"&ecuSn=" + ecuSn,
});
setTimeout(() => {
isloading.value = false;
}, 500);
}
})
}
const gotoPage = (orderType, item) => {
switch (orderType) {
case "1":
uni.navigateTo({
url: `/pages/devops/maintenancepage/maintenancepage?bikeCode=${item.bikeCode}`
})
console.log("跳转到维修页面");
// 使 window.location.href
break;
case "2":
//
console.log("跳转到换电页面");
// 使
break;
case "3":
uni.navigateTo({
url: `/pages/warehouse/vehicledispatch/vehicledispatch?orderId=${item.orderId}`
});
console.log("跳转到调度页面");
//
break;
default:
// orderType123
console.log("无效的orderType");
break;
}
};
const gotoPage = (orderType, item) => {
switch (orderType) {
case "1":
uni.navigateTo({
url: `/pages/devops/maintenancepage/maintenancepage?bikeCode=${item.bikeCode}`,
});
console.log("跳转到维修页面");
// 使 window.location.href
break;
case "2":
//
console.log("跳转到换电页面");
// 使
break;
case "3":
uni.navigateTo({
url: `/pages/warehouse/vehicledispatch/vehicledispatch?orderId=${item.orderId}`,
});
console.log("跳转到调度页面");
//
break;
default:
// orderType123
console.log("无效的orderType");
break;
}
};
</script>
<style>
.query-selector {
margin: 15px 10px 0px 10px;
display: flex;
flex-wrap: wrap;
}
.query-selector {
margin: 15px 10px 0px 10px;
display: flex;
flex-wrap: wrap;
}
.container {
height: 100vh;
padding: 0px 0px;
background-color: #ffffff;
}
.container {
height: 100vh;
padding: 0px 0px;
background-color: #ffffff;
}
.query-option {
padding: 5px 15px;
font-size: 13px;
font-weight: 400;
background: #f5f5f5;
margin: 5px 5px;
border-radius: 3px;
color: #000000;
}
.query-option {
padding: 5px 15px;
font-size: 13px;
font-weight: 400;
background: #f5f5f5;
margin: 5px 5px;
border-radius: 3px;
color: #000000;
}
.query-select {
color: #ffffff;
background: rgb(0, 132, 255);
}
.query-select {
color: #ffffff;
background: rgb(0, 132, 255);
}
.cardtitleri {
font-size: 15px;
color: #3a3a3a;
padding: 5px;
font-weight: bold;
.cardtitleri {
font-size: 15px;
color: #3a3a3a;
padding: 5px;
font-weight: bold;
}
}
.cardtitle {
margin: 5px 0px;
padding: 5px 0px;
border-bottom: solid 1px #f1f1f1;
}
.cardtitle {
margin: 5px 0px;
padding: 5px 0px;
border-bottom: solid 1px #f1f1f1;
}
.deepBlackBoldText {
font-weight: bold;
}
.deepBlackBoldText {
font-weight: bold;
}
.uni-forms-item__content {
position: relative;
font-size: 14px;
flex: 1;
box-sizing: border-box;
line-height: 36px;
flex-direction: row;
}
.uni-forms-item__content {
position: relative;
font-size: 14px;
flex: 1;
box-sizing: border-box;
line-height: 36px;
flex-direction: row;
}
.uni-forms-item {
position: relative;
display: flex;
margin-bottom: 2px !important;
flex-direction: row;
}
</style>
.uni-forms-item {
position: relative;
display: flex;
margin-bottom: 2px !important;
flex-direction: row;
}
</style>

View File

@ -545,7 +545,6 @@ function changeDDLX() {
//
function getZone(callback) {
api.callOperateApi("ebikeRegion/getZone", null, "get").then((res) => {
console.log(res);
const arrData = [];
const { code, data, message } = res;
if (code != 200) {
@ -632,7 +631,7 @@ function changeArea(data, refresh) {
uni.showLoading({
title: "加载中",
});
console.log(zoneId, "zoneId");
console.log(zoneId);
map.getOperation(zoneId, (res) => {
uni.hideLoading();
@ -780,7 +779,10 @@ function loadMapRegionData(show, data) {
//
function refreshArea() {
changeArea(selArea, true);
getZone((arrData) => {
arrAreaData.value = arrData || [];
changeArea(selArea, true);
});
}
//

View File

@ -124,7 +124,13 @@ const btnList = [
key: "dispatch",
name: "调度",
path: "/pages/warehouse/carDispatchByMine/carDispatchByMine",
customsrc: "icon-ebikeditu2",
customsrc: "icon-ebikeditu",
},
{
key: "maintainOrder",
name: "调度",
path: "/pages/warehouse/carDispatchByMine/carDispatchByMine",
customsrc: "icon-ebikeweixiuoff",
},
],
},
@ -232,12 +238,20 @@ onMounted(() => {
}
});
menus[0].children.push({
key: "dispatch",
name: "调度",
path: "/pages/warehouse/carDispatchByMine/carDispatchByMine",
customsrc: "icon-ebikeditu",
});
menus[0].children.push(
{
key: "dispatch",
name: "调度",
path: "/pages/warehouse/carDispatchByMine/carDispatchByMine",
customsrc: "icon-ebikeditu",
},
{
key: "maintainOrder",
name: "维修接单",
path: "/pages/warehouse/maintainOrder/maintainOrderList",
customsrc: "icon-ebikeweixiuoff",
}
);
dataList.value = menus;
}

View File

@ -349,6 +349,9 @@ const handleLeaveWarehouse = () => {
status: statusZT.value,
reginId: "",
};
console.log(params);
api.callEbikeInfo("vehicleLeaveWarehouse", params).then((res) => {
isSubmit.value = false;
if (res.code == 200) {
@ -361,8 +364,8 @@ const handleLeaveWarehouse = () => {
searchInfo();
} else {
uni.showToast({
title: "操作失败",
icon: "error",
title: res.message || "操作失败",
icon: "none",
duration: 2000,
});
}
@ -401,8 +404,8 @@ const handleLaunch = () => {
}, 1000); //
} else {
uni.showToast({
title: "操作失败",
icon: "error",
title: res.message || "操作失败",
icon: "none",
duration: 2000,
});
}

View File

@ -0,0 +1,106 @@
<template>
<uni-card>
<!-- 标题 -->
<template v-slot:title>
<view class="card-title-wrapeer">
<!-- <text class="cardtitleri flex1">{{ item.bikeCode || "--" }}</text> -->
<uni-icons
@click="handleClick"
type="right"
size="20"
class="flex1"
style="text-align: right"
></uni-icons>
</view>
</template>
<!-- 内容 -->
<uni-forms label-width="80">
<uni-forms-item label="车辆编号:">
<view class="deepBlackBoldText">
<span> {{ item.bikeCode || "--" }}</span>
</view>
</uni-forms-item>
<!-- <uni-forms-item label="维修部位:">
<view class="deepBlackBoldText">
<span> {{ item.faultPart || "--" }} </span>
</view>
</uni-forms-item> -->
<!-- <uni-forms-item label="上报时间:">
<view class="deepBlackBoldText">
<span> {{ item.reportAt || "--" }} </span>
</view>
</uni-forms-item> -->
</uni-forms>
</uni-card>
</template>
<script setup>
import { ref, onMounted } from "vue";
const props = defineProps({
item: {
type: Object,
default: () => ({
title: "默认标题",
bikeCode: "123456",
maintainPart: "前轮",
bikeStatus: "待维修",
createdAt: "2023-10-01 12:00:00",
}),
},
});
const emits = defineEmits(["click"]);
const handleClick = () => {
emits("click", props.item);
};
</script>
<script>
export default {
options: { styleIsolation: "shared" },
};
</script>
<style lang="scss" scoped>
.card-title-wrapeer {
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 0px;
border-bottom: solid 1px #f1f1f1;
.flex1 {
flex: 1;
}
.cardtitleri {
font-size: 15px;
color: #3a3a3a;
padding: 5px;
font-weight: bold;
}
}
.deepBlackBoldText {
font-weight: bold;
}
:deep(.uni-forms .uni-forms-item__content) {
position: relative;
font-size: 14px;
flex: 1;
box-sizing: border-box;
line-height: 15px;
vertical-align: middle;
flex-direction: row;
display: flex;
align-items: center;
}
:deep(.uni-forms .uni-forms-item) {
position: relative;
display: flex;
margin-bottom: 2px !important;
flex-direction: row;
}
</style>

View File

@ -0,0 +1,252 @@
<template>
<view class="maintainOrderDetail-main">
<!-- 内容 -->
<view class="content-wrapper">
<uni-card
v-for="(item, index) in FaultReportList"
:key="item.faultReportId"
>
<uni-forms label-width="80">
<uni-forms-item label="车辆编号:">
<view class="deepBlackBoldText">
<span>{{ item["bikeCode"] || "---" }} </span>
</view>
</uni-forms-item>
<uni-forms-item label="故障部位:">
<view class="deepBlackBoldText">
<span>{{ item["faultPart"] || "---" }} </span>
</view>
</uni-forms-item>
<uni-forms-item label="故障内容:">
<view class="deepBlackBoldText">
<span>{{ item["faultDescription"] || "---" }} </span>
</view>
</uni-forms-item>
<!-- <uni-forms-item label="上报人:">
<view class="deepBlackBoldText">
<span> </span>
</view>
</uni-forms-item> -->
<uni-forms-item label="上报来源:">
<view class="deepBlackBoldText">
<span>{{ item["reportSource"] || "---" }} </span>
</view>
</uni-forms-item>
<uni-forms-item label="上报时间:">
<view class="deepBlackBoldText">
<span>{{ item["reportAt"] || "---" }} </span>
</view>
</uni-forms-item>
<!-- <uni-forms-item label="在线状态:">
<view class="deepBlackBoldText">
<span> </span>
</view>
</uni-forms-item> -->
<uni-forms-item label="电池电量:">
<view class="deepBlackBoldText">
<span>{{ bickInfo["resGPSDto"]["soc"] || 0 }} %</span>
</view>
</uni-forms-item>
<uni-forms-item label="车辆位置:">
<view class="deepBlackBoldText center">
<text style="width: 100rpx">
{{
formatCoordinates(
bickInfo["resGPSDto"]["longitude"],
bickInfo["resGPSDto"]["latitude"]
)
}}
</text>
<view
class="center"
@click="
viewMap(
bickInfo['resGPSDto']['longitude'],
bickInfo['resGPSDto']['latitude']
)
"
>
<text>查看地图</text>
<uni-icons type="right" size="20"></uni-icons>
</view>
</view>
</uni-forms-item>
<uni-forms-item label="信号强度:">
<view class="deepBlackBoldText">
<span>{{ bickInfo["resGPSDto"]["gsm"] || 0 }} </span>
</view>
</uni-forms-item>
</uni-forms>
<button class="fancy-button" @click="hanldeOrder(item)">接单</button>
</uni-card>
<view style="width: 100%; margin-top: 50px"></view>
</view>
</view>
</template>
<script setup>
import { ref } from "vue";
import { onLoad } from "@dcloudio/uni-app";
import navigator from "@/utils/navigator.js";
import * as api from "@/utils/api.js";
import { onUnload } from "@dcloudio/uni-app";
const userInfo = ref({});
const bickInfo = ref({
resGPSDto: {},
});
const FaultReportList = ref([]);
//
const getMaintainOrderDetail = async (bikeCode) => {
FaultReportList.value = [];
const params = {
receiverId: userInfo.value.staffId,
bikeCode,
};
// console.log(params, "");
try {
//
const bickRes = await api.callEbikeInfo(
"getBikeINfoData?bikeCode=" + bikeCode
);
if (bickRes.code === 200) {
bickInfo.value = bickRes.data;
}
const FaultReportRes = await api.callEbikeInfo(
"getFaultReportList?bikeCode=" + bikeCode,
{},
"get"
);
if (FaultReportRes.code === 200) {
FaultReportList.value = FaultReportRes.data;
console.log(FaultReportList.value, "====");
}
// console.log(FaultReportRes);
// console.log(bickRes, "");
} catch (error) {
console.error("获取维修单详情失败:", error);
}
};
//
const formatCoordinates = (longitude, latitude) => {
if (!longitude || !latitude) return "--";
return `${longitude}, ${latitude}`;
};
//
const viewMap = (lng, lat) => {
uni.navigateTo({
url: "/pages/map/map-findbike?longitude=" + lng + "&latitude=" + lat,
});
};
onLoad((option) => {
const { bikeCode } = navigator.getParams(option);
userInfo.value = uni.getStorageSync("userInfo");
if (bikeCode) {
getMaintainOrderDetail(bikeCode);
}
});
//
const hanldeOrder = (item) => {
console.log(item, "点击接单");
const faultIds = [item.faultReportId];
const params = {
bikeCode: item.bikeCode,
faultIds: faultIds,
receiverId: userInfo.value.staffId,
};
console.log(params);
api.callEbikeInfo("createWorkOrder", params).then((res) => {
if (res.code == 200) {
uni.showToast({
title: "接单成功",
icon: "success",
duration: 2000,
});
getMaintainOrderDetail(item.bikeCode);
}
});
};
onUnload(() => {
console.log("组件卸载-----22");
});
</script>
<script>
export default {
options: { styleIsolation: "shared" },
};
</script>
<style lang="scss" scoped>
.maintainOrderDetail-main {
width: 100%;
height: 100vh;
.content-wrapper {
width: 100%;
height: 100%;
background-color: #f3f3f3;
overflow-y: auto;
.deepBlackBoldText {
font-weight: bold;
}
:deep(.uni-forms .uni-forms-item__content) {
position: relative;
font-size: 14px;
flex: 1;
box-sizing: border-box;
flex-direction: row;
line-height: 36px;
}
:deep(.uni-forms .uni-forms-item) {
position: relative;
display: flex;
flex-direction: row;
margin-bottom: 10px !important;
}
}
.fancy-button {
padding: 10rpx 24rpx;
margin: 15rpx 0;
background: linear-gradient(to right, #3b82f6, #2563eb);
color: white;
border: none;
border-radius: 20rpx;
font-size: 28rpx;
font-weight: bold;
box-shadow: 0 6px 12px rgba(0, 191, 255, 0.3);
transition: all 0.2s ease;
cursor: pointer;
&:hover {
box-shadow: 0 8px 16px rgba(0, 191, 255, 0.4);
}
&:active {
transform: scale(0.95);
box-shadow: 0 4px 8px rgba(0, 191, 255, 0.2);
}
}
}
.center {
display: flex;
justify-content: space-between;
align-items: center;
}
</style>

View File

@ -0,0 +1,80 @@
<template>
<z-paging
v-model="listdata"
ref="paging"
@query="loadMoreData"
:default-page-no="1"
:default-page-size="5"
:auto-show-back-to-top="true"
bg-color="#f3f3f3"
>
<view class="card-wrapper" v-for="item in listdata" :key="item.id">
<MaintainOrderCard
:key="item.id"
:item="item"
@click="handleOrderClick"
/>
</view>
</z-paging>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from "vue";
import MaintainOrderCard from "./components/maintainOrderCard.vue";
import navigator from "@/utils/navigator.js";
import * as api from "@/utils/api.js";
const paging = ref();
const listdata = ref([]);
const loadMoreData = (pageNo, pageSize) => {
const params = {
pageParam: {
pageNum: pageNo,
pageSize: pageSize,
},
};
api
.callEbikeOrder(
`pageMaintenanceOrders?pageNum=${pageNo}&pageSize=${pageSize}`,
{},
"get"
)
.then((res) => {
if (res.code === 200) {
const { records } = res.data;
paging.value.complete(records);
} else {
paging.value.complete(false);
}
});
// paging.value.complete([{}, {}, {}, {}, {}, {}]); //
};
const handleOrderClick = (item) => {
console.log("Order clicked:", item);
navigator.to("/pages/warehouse/maintainOrder/maintainOrderDetail", {
bikeCode: item.bikeCode,
});
};
onMounted(() => {
console.log("组件挂载");
uni.$on("refresh", (params) => {
console.log("通过事件接收参数:", params);
// ...
});
});
onUnmounted(() => {
uni.$off("refresh");
});
</script>
<style lang="scss" scoped>
.card-wrapper {
width: 100%;
}
</style>

View File

@ -51,7 +51,7 @@
<uni-tr v-for="(item, index) in dispatchRecords" :key="index">
<uni-td>{{ item.bikeCode }}</uni-td>
<uni-td>
<view class="name">离线</view>
<view class="name">{{ item.connected ? "在线" : "离线" }}</view>
</uni-td>
<uni-td align="center">
<view class="cu-tag line-blue">

View File

@ -1,5 +1,5 @@
const config = {
// apiUrl: "http://192.168.2.142:10010/",
// apiUrl: "http://192.168.2.140:10010/",
// apiUrl: "https://www.cdzhuojing.cn/ebike/",
apiUrl: "https://www.cx.cdzhuojing.cn/ebike/",
cdnPath: "/",