feat: 添加设备归还功能和时间解析逻辑
在订单页面中添加了设备归还按钮,允许用户在订单状态为1时归还设备。同时,在归还页面中优化了时间解析逻辑,确保能够正确处理后端返回的时间格式,并更新使用时长和费用信息。删除了不再使用的axios相关文件,整合了uview-ui库以提升项目性能。
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
<view class="order-header">
|
||||
<text class="order-no">订单号:{{ order.orderNo }}</text>
|
||||
<text class="order-status" :class="OrderStatusMap[order.status]?.class">{{ OrderStatusMap[order.status]?.text }}</text>
|
||||
<navigator v-if="order.status === 1" :url="`/pages/return/index?deviceId=${order.deviceId}&orderId=${order.orderNo}`" class="return-btn">归还设备</navigator>
|
||||
</view>
|
||||
<view class="order-content">
|
||||
<view class="device-info">
|
||||
|
||||
+16
-18
@@ -101,8 +101,18 @@ export default {
|
||||
|
||||
if (result.code === 200 && result.data) {
|
||||
const orderData = result.data
|
||||
// 格式化开始时间
|
||||
this.orderInfo.startTime = this.formatTime(new Date(orderData.createTime))
|
||||
const rawTime = orderData.startTime
|
||||
console.log('原始时间:', rawTime)
|
||||
const fixedTime = rawTime.replace(' ', 'T')
|
||||
const date = new Date(fixedTime)
|
||||
console.log('原始时间:', rawTime);
|
||||
if (isNaN(date.getTime())) {
|
||||
this.orderInfo.startTime = '时间解析错误'
|
||||
} else {
|
||||
console.log('原始时间:', rawTime);
|
||||
|
||||
this.orderInfo.startTime = this.formatTime(date)
|
||||
}
|
||||
// 计算使用时长
|
||||
this.calculateUsedTime(orderData.createTime)
|
||||
// 设置当前费用
|
||||
@@ -138,22 +148,10 @@ export default {
|
||||
return `${year}-${month}-${day} ${hour}:${minute}`
|
||||
},
|
||||
|
||||
// 计算使用时长
|
||||
calculateUsedTime(startTime) {
|
||||
const start = new Date(startTime)
|
||||
const now = new Date()
|
||||
const diffMs = now - start
|
||||
|
||||
// 计算分钟数
|
||||
const minutes = Math.floor(diffMs / (1000 * 60))
|
||||
|
||||
if (minutes < 60) {
|
||||
this.orderInfo.usedTime = `${minutes}分钟`
|
||||
} else {
|
||||
const hours = Math.floor(minutes / 60)
|
||||
const remainMinutes = minutes % 60
|
||||
this.orderInfo.usedTime = `${hours}小时${remainMinutes}分钟`
|
||||
}
|
||||
// 使用后端返回的使用时长和费用数据
|
||||
updateOrderInfo(orderData) {
|
||||
this.orderInfo.usedTime = orderData.usedTime || '0分钟';
|
||||
this.orderInfo.currentFee = orderData.currentFee || '0.00';
|
||||
},
|
||||
|
||||
// 更新使用时长的定时器
|
||||
|
||||
+9
-19
@@ -1,25 +1,15 @@
|
||||
{
|
||||
"hash": "cbb77b90",
|
||||
"configHash": "02d49493",
|
||||
"lockfileHash": "a9202ca1",
|
||||
"browserHash": "41ab211e",
|
||||
"hash": "eecc45c6",
|
||||
"configHash": "e4fbd916",
|
||||
"lockfileHash": "78df9316",
|
||||
"browserHash": "8d847c28",
|
||||
"optimized": {
|
||||
"axios": {
|
||||
"src": "../../../../../node_modules/axios/index.js",
|
||||
"file": "axios.js",
|
||||
"fileHash": "a532ef26",
|
||||
"needsInterop": false
|
||||
},
|
||||
"uniapp-axios-adapter": {
|
||||
"src": "../../../../../node_modules/uniapp-axios-adapter/lib/index.esm.js",
|
||||
"file": "uniapp-axios-adapter.js",
|
||||
"fileHash": "63f5b0fe",
|
||||
"uview-ui": {
|
||||
"src": "../../../../../node_modules/uview-ui/index.js",
|
||||
"file": "uview-ui.js",
|
||||
"fileHash": "b095c49f",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"chunk-U6PB43C6": {
|
||||
"file": "chunk-U6PB43C6.js"
|
||||
}
|
||||
}
|
||||
"chunks": {}
|
||||
}
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
import {
|
||||
Axios,
|
||||
AxiosError,
|
||||
AxiosHeaders,
|
||||
Cancel,
|
||||
CancelToken,
|
||||
CanceledError,
|
||||
HttpStatusCode,
|
||||
VERSION,
|
||||
all,
|
||||
axios_default,
|
||||
formToJSON,
|
||||
getAdapter,
|
||||
isAxiosError,
|
||||
isCancel,
|
||||
mergeConfig,
|
||||
spread,
|
||||
toFormData
|
||||
} from "./chunk-U6PB43C6.js";
|
||||
export {
|
||||
Axios,
|
||||
AxiosError,
|
||||
AxiosHeaders,
|
||||
Cancel,
|
||||
CancelToken,
|
||||
CanceledError,
|
||||
HttpStatusCode,
|
||||
VERSION,
|
||||
all,
|
||||
axios_default as default,
|
||||
formToJSON,
|
||||
getAdapter,
|
||||
isAxiosError,
|
||||
isCancel,
|
||||
mergeConfig,
|
||||
spread,
|
||||
toFormData
|
||||
};
|
||||
//# sourceMappingURL=axios.js.map
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sourcesContent": [],
|
||||
"mappings": "",
|
||||
"names": []
|
||||
}
|
||||
-2534
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,54 +0,0 @@
|
||||
import {
|
||||
axios_default
|
||||
} from "./chunk-U6PB43C6.js";
|
||||
|
||||
// ../../../共享风扇1-3/fs/node_modules/uniapp-axios-adapter/lib/index.esm.js
|
||||
var getResponse = (res, config) => {
|
||||
const { statusCode, errMsg } = res;
|
||||
const response = {
|
||||
...res,
|
||||
status: statusCode,
|
||||
statusText: errMsg,
|
||||
config,
|
||||
request: null
|
||||
};
|
||||
return response;
|
||||
};
|
||||
var uniAdapter = (config) => {
|
||||
if (!uni) {
|
||||
throw new Error("please use this in uni-app project!");
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
const { baseURL, url, headers, data, params } = config;
|
||||
const uniConfig = {
|
||||
...config,
|
||||
url: baseURL + url,
|
||||
header: headers
|
||||
};
|
||||
if (data || params) {
|
||||
try {
|
||||
uniConfig.data = JSON.parse(data || params);
|
||||
} catch (e) {
|
||||
uniConfig.data = data || params;
|
||||
}
|
||||
}
|
||||
uni.request({
|
||||
...uniConfig,
|
||||
success(res) {
|
||||
const response = getResponse(res, config);
|
||||
resolve(response);
|
||||
},
|
||||
fail(res) {
|
||||
const response = getResponse(res, config);
|
||||
reject(response);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
var UniAdapter = uniAdapter;
|
||||
axios_default.defaults.adapter = uniAdapter;
|
||||
export {
|
||||
UniAdapter,
|
||||
axios_default as default
|
||||
};
|
||||
//# sourceMappingURL=uniapp-axios-adapter.js.map
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../../../../node_modules/uniapp-axios-adapter/lib/index.esm.js"],
|
||||
"sourcesContent": ["import axios from 'axios';\nexport { default } from 'axios';\n\nconst getResponse = (res, config) => {\n const { statusCode, errMsg } = res;\n const response = {\n ...res,\n status: statusCode,\n statusText: errMsg,\n config,\n request: null,\n };\n\n return response;\n};\n\nconst uniAdapter = (config) => {\n if (!uni) {\n throw new Error(\"please use this in uni-app project!\");\n }\n return new Promise((resolve, reject) => {\n const { baseURL, url, headers, data, params } = config;\n const uniConfig = {\n ...config,\n url: baseURL + url,\n header: headers,\n };\n\n if (data || params) {\n try {\n uniConfig.data = JSON.parse(data || params);\n } catch (e) {\n uniConfig.data = data || params;\n }\n }\n uni.request({\n ...uniConfig,\n success(res) {\n const response = getResponse(res, config);\n resolve(response);\n },\n fail(res) {\n const response = getResponse(res, config);\n reject(response);\n },\n });\n });\n};\n\nconst UniAdapter = uniAdapter;\n\naxios.defaults.adapter = uniAdapter;\n\nexport { UniAdapter };\n"],
|
||||
"mappings": ";;;;;AAGA,IAAM,cAAc,CAAC,KAAK,WAAW;AACnC,QAAM,EAAE,YAAY,OAAO,IAAI;AAC/B,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,EACX;AAEA,SAAO;AACT;AAEA,IAAM,aAAa,CAAC,WAAW;AAC7B,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,EAAE,SAAS,KAAK,SAAS,MAAM,OAAO,IAAI;AAChD,UAAM,YAAY;AAAA,MAChB,GAAG;AAAA,MACH,KAAK,UAAU;AAAA,MACf,QAAQ;AAAA,IACV;AAEA,QAAI,QAAQ,QAAQ;AAClB,UAAI;AACF,kBAAU,OAAO,KAAK,MAAM,QAAQ,MAAM;AAAA,MAC5C,SAAS,GAAG;AACV,kBAAU,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF;AACA,QAAI,QAAQ;AAAA,MACV,GAAG;AAAA,MACH,QAAQ,KAAK;AACX,cAAM,WAAW,YAAY,KAAK,MAAM;AACxC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,KAAK,KAAK;AACR,cAAM,WAAW,YAAY,KAAK,MAAM;AACxC,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEA,IAAM,aAAa;AAEnB,cAAM,SAAS,UAAU;",
|
||||
"names": []
|
||||
}
|
||||
+1109
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvaW5kZXgudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
|
||||
{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvb3JkZXIvaW5kZXgudnVl"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/order/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
|
||||
{"version":3,"file":"index.js","sources":["E:/迅雷下载/HBuilderX.4.57.2025032507/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcmV0dXJuL2luZGV4LnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'C:/Users/Administrator.DESKTOP-IRCM9I0/Desktop/locker-fans/locker-fans/uni-fans/pages/return/index.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,GAAG,WAAW,eAAe;"}
|
||||
+13
-9
@@ -34,7 +34,7 @@ const _sfc_main = {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:97", "获取订单详情失败:", error);
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:98", "获取订单详情失败:", error);
|
||||
}
|
||||
}
|
||||
await this.getOrderList();
|
||||
@@ -54,7 +54,7 @@ const _sfc_main = {
|
||||
}));
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:120", "获取订单列表失败:", error);
|
||||
common_vendor.index.__f__("error", "at pages/order/index.vue:121", "获取订单列表失败:", error);
|
||||
common_vendor.index.showToast({
|
||||
title: "获取订单列表失败",
|
||||
icon: "none"
|
||||
@@ -80,16 +80,20 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||
}),
|
||||
b: common_vendor.f($data.orderList, (order, index, i0) => {
|
||||
var _a, _b;
|
||||
return {
|
||||
return common_vendor.e({
|
||||
a: common_vendor.t(order.orderNo),
|
||||
b: common_vendor.t((_a = $data.OrderStatusMap[order.status]) == null ? void 0 : _a.text),
|
||||
c: common_vendor.n((_b = $data.OrderStatusMap[order.status]) == null ? void 0 : _b.class),
|
||||
d: common_vendor.t(order.deviceId),
|
||||
e: common_vendor.t(order.startTime),
|
||||
f: common_vendor.t(order.endTime || "-"),
|
||||
g: common_vendor.t(order.amount),
|
||||
h: index
|
||||
};
|
||||
d: order.status === 1
|
||||
}, order.status === 1 ? {
|
||||
e: `/pages/return/index?deviceId=${order.deviceId}&orderId=${order.orderNo}`
|
||||
} : {}, {
|
||||
f: common_vendor.t(order.deviceId),
|
||||
g: common_vendor.t(order.startTime),
|
||||
h: common_vendor.t(order.endTime || "-"),
|
||||
i: common_vendor.t(order.amount),
|
||||
j: index
|
||||
});
|
||||
}),
|
||||
c: $data.orderList.length === 0
|
||||
}, $data.orderList.length === 0 ? {} : {});
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
<view class="order-container data-v-17a44f9d"><view class="tab-bar data-v-17a44f9d"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-17a44f9d', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-17a44f9d"><view wx:for="{{b}}" wx:for-item="order" wx:key="h" class="order-item data-v-17a44f9d"><view class="order-header data-v-17a44f9d"><text class="order-no data-v-17a44f9d">订单号:{{order.a}}</text><text class="{{['order-status', 'data-v-17a44f9d', order.c]}}">{{order.b}}</text></view><view class="order-content data-v-17a44f9d"><view class="device-info data-v-17a44f9d"><text class="device-name data-v-17a44f9d">共享风扇</text><text class="device-id data-v-17a44f9d">设备号:{{order.d}}</text></view><view class="time-info data-v-17a44f9d"><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">开始时间:</text><text class="value data-v-17a44f9d">{{order.e}}</text></view><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">结束时间:</text><text class="value data-v-17a44f9d">{{order.f}}</text></view></view><view class="price-info data-v-17a44f9d"><text class="amount data-v-17a44f9d">¥{{order.g}}</text></view></view></view></view><view wx:if="{{c}}" class="empty-tip data-v-17a44f9d"><view class="empty-icon data-v-17a44f9d"></view><text class="data-v-17a44f9d">暂无订单记录</text></view></view>
|
||||
<view class="order-container data-v-17a44f9d"><view class="tab-bar data-v-17a44f9d"><view wx:for="{{a}}" wx:for-item="tab" wx:key="b" class="{{['tab-item', 'data-v-17a44f9d', tab.c && 'active']}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="order-list data-v-17a44f9d"><view wx:for="{{b}}" wx:for-item="order" wx:key="j" class="order-item data-v-17a44f9d"><view class="order-header data-v-17a44f9d"><text class="order-no data-v-17a44f9d">订单号:{{order.a}}</text><text class="{{['order-status', 'data-v-17a44f9d', order.c]}}">{{order.b}}</text><navigator wx:if="{{order.d}}" url="{{order.e}}" class="return-btn data-v-17a44f9d">归还设备</navigator></view><view class="order-content data-v-17a44f9d"><view class="device-info data-v-17a44f9d"><text class="device-name data-v-17a44f9d">共享风扇</text><text class="device-id data-v-17a44f9d">设备号:{{order.f}}</text></view><view class="time-info data-v-17a44f9d"><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">开始时间:</text><text class="value data-v-17a44f9d">{{order.g}}</text></view><view class="time-item data-v-17a44f9d"><text class="label data-v-17a44f9d">结束时间:</text><text class="value data-v-17a44f9d">{{order.h}}</text></view></view><view class="price-info data-v-17a44f9d"><text class="amount data-v-17a44f9d">¥{{order.i}}</text></view></view></view></view><view wx:if="{{c}}" class="empty-tip data-v-17a44f9d"><view class="empty-icon data-v-17a44f9d"></view><text class="data-v-17a44f9d">暂无订单记录</text></view></view>
|
||||
+15
-14
@@ -35,7 +35,17 @@ const _sfc_main = {
|
||||
const result = await config_user.queryById(this.orderInfo.orderId);
|
||||
if (result.code === 200 && result.data) {
|
||||
const orderData = result.data;
|
||||
this.orderInfo.startTime = this.formatTime(new Date(orderData.createTime));
|
||||
const rawTime = orderData.startTime;
|
||||
common_vendor.index.__f__("log", "at pages/return/index.vue:105", "原始时间:", rawTime);
|
||||
const fixedTime = rawTime.replace(" ", "T");
|
||||
const date = new Date(fixedTime);
|
||||
common_vendor.index.__f__("log", "at pages/return/index.vue:108", "原始时间:", rawTime);
|
||||
if (isNaN(date.getTime())) {
|
||||
this.orderInfo.startTime = "时间解析错误";
|
||||
} else {
|
||||
common_vendor.index.__f__("log", "at pages/return/index.vue:112", "原始时间:", rawTime);
|
||||
this.orderInfo.startTime = this.formatTime(date);
|
||||
}
|
||||
this.calculateUsedTime(orderData.createTime);
|
||||
this.orderInfo.currentFee = orderData.amount || "0.00";
|
||||
} else {
|
||||
@@ -64,19 +74,10 @@ const _sfc_main = {
|
||||
const minute = date.getMinutes().toString().padStart(2, "0");
|
||||
return `${year}-${month}-${day} ${hour}:${minute}`;
|
||||
},
|
||||
// 计算使用时长
|
||||
calculateUsedTime(startTime) {
|
||||
const start = new Date(startTime);
|
||||
const now = /* @__PURE__ */ new Date();
|
||||
const diffMs = now - start;
|
||||
const minutes = Math.floor(diffMs / (1e3 * 60));
|
||||
if (minutes < 60) {
|
||||
this.orderInfo.usedTime = `${minutes}分钟`;
|
||||
} else {
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const remainMinutes = minutes % 60;
|
||||
this.orderInfo.usedTime = `${hours}小时${remainMinutes}分钟`;
|
||||
}
|
||||
// 使用后端返回的使用时长和费用数据
|
||||
updateOrderInfo(orderData) {
|
||||
this.orderInfo.usedTime = orderData.usedTime || "0分钟";
|
||||
this.orderInfo.currentFee = orderData.currentFee || "0.00";
|
||||
},
|
||||
// 更新使用时长的定时器
|
||||
startTimer() {
|
||||
|
||||
Reference in New Issue
Block a user