对接数据库,模拟第三方接入信息

This commit is contained in:
not-like-juvenile
2026-02-09 08:54:26 +08:00
parent a5e7afacec
commit 3ea0f008b5
14 changed files with 882 additions and 502 deletions

View File

@@ -1,6 +1,7 @@
<template>
<view class="container">
<view class="header">
<text class="back-link" @click="goBack">⬅ 返回</text>
<text class="title">第三方物流 API 模拟发送器</text>
<text class="subtitle">模拟外部物流平台向后端推送 Webhook 轨迹数据</text>
</view>
@@ -18,7 +19,7 @@
</view>
<view class="section">
<text class="section-title">2. 构造圆通协议数据 (YTO Protocol)</text>
<text class="section-title">2. 构造协议数据 (YTO Protocol)</text>
<view class="form-group">
<text class="label">物流单号 (mailNo):</text>
<input class="input" v-model="form.mailNo" placeholder="请输入运单号" />
@@ -56,11 +57,26 @@
<script setup lang="uts">
import { mockService, MockOrder } from './mock-service.uts'
import { onShow } from '@dcloudio/uni-app'
const orders = ref([] as MockOrder[])
const shippedOrders = computed((): MockOrder[] => {
return mockService.getMockOrders().filter((o: MockOrder): boolean => o.status !== 'PENDING' && o.tracking_no !== '')
return orders.value.filter((o: MockOrder): boolean => o.status !== 'PENDING' && o.tracking_no !== '')
})
async function loadOrders() {
const data = await mockService.getMockOrders()
orders.value = data
}
onShow(() => {
loadOrders()
})
function goBack() {
uni.navigateBack()
}
const selectedOrderIndex = ref(-1)
const form = reactive({
@@ -111,12 +127,23 @@
form.infoContent = statusOptions[idx].value
}
function sendWebhook() {
async function sendWebhook() {
if (!form.mailNo) {
uni.showToast({ title: '请先填写运单号', icon: 'none' })
return
}
// 检查单号对应的订单是否已签收
const targetOrder = orders.value.find((o: MockOrder): boolean => o.tracking_no === form.mailNo)
if (targetOrder != null && targetOrder.status === 'DELIVERED') {
uni.showModal({
title: '提示',
content: '该订单已显示已签收,无需继续推送物流动态。',
showCancel: false
})
return
}
// 获取当前时间戳作为圆通要求的 acceptTime
const now = new Date()
const Y = now.getFullYear()
@@ -137,11 +164,14 @@
carrier: form.carrier
} as UTSJSONObject
const success = mockService.pushWebhookData(payload)
uni.showLoading({ title: '正在推送至数据库...' })
const success = await mockService.pushWebhookData(payload)
uni.hideLoading()
if (success) {
uni.showToast({ title: 'API 发送成功!', icon: 'success' })
// 可选:跳转到详情或日志预览
// 成功后刷新列表,更新订单状态
loadOrders()
} else {
uni.showModal({
title: '发送失败',
@@ -165,13 +195,22 @@
.header {
margin-bottom: 25px;
display: flex;
flex-direction: row;
align-items: center;
gap: 20rpx;
}
.back-link {
font-size: 14px;
color: #007aff;
cursor: pointer;
}
.title {
font-size: 20px;
font-weight: bold;
color: #333;
display: block;
}
.subtitle {