创建数据库表格

This commit is contained in:
not-like-juvenile
2026-02-06 16:56:24 +08:00
parent 56ae71babf
commit a5e7afacec
12 changed files with 645 additions and 59 deletions

View File

@@ -18,24 +18,24 @@
</view>
<view class="section">
<text class="section-title">2. 构造回调数据 (JSON Payload)</text>
<text class="section-title">2. 构造圆通协议数据 (YTO Protocol)</text>
<view class="form-group">
<text class="label">运单号:</text>
<input class="input" v-model="form.tracking_no" placeholder="请输入运单号" />
<text class="label">物流单号 (mailNo):</text>
<input class="input" v-model="form.mailNo" placeholder="请输入运单号" />
</view>
<view class="form-group">
<text class="label">快递公司:</text>
<input class="input" v-model="form.carrier" placeholder="请输入快递公司" />
<text class="label">订单号 (txLogisticId):</text>
<input class="input" v-model="form.txLogisticId" placeholder="请输入关联订单号" />
</view>
<view class="form-group">
<text class="label">物流状态:</text>
<text class="label">事件状态 (infoContent):</text>
<picker :range="statusOptions" range-key="label" @change="onStatusChange">
<view class="picker-val">{{ currentStatusLabel }}</view>
</picker>
</view>
<view class="form-group">
<text class="label">轨迹描述文字:</text>
<textarea class="textarea" v-model="form.event_text" placeholder="描述当前的物流位置或状态..." />
<text class="label">轨迹描述 (remark):</text>
<textarea class="textarea" v-model="form.remark" placeholder="描述当前的物流位置或状态..." />
</view>
</view>
@@ -64,61 +64,77 @@
const selectedOrderIndex = ref(-1)
const form = reactive({
tracking_no: '',
carrier: '',
status_code: 'IN_TRANSIT',
event_text: '快件已到达【XX转运中心】,准备发往下一站'
mailNo: '',
txLogisticId: '',
infoContent: 'SEND',
remark: '快件已到达【XX分拨中心】,准备发往下一站',
acceptTime: '',
carrier: '圆通速递'
})
const statusOptions = [
{ label: '在途中 (IN_TRANSIT)', value: 'IN_TRANSIT' },
{ label: '派送中 (OUT_FOR_DELIVERY)', value: 'OUT_FOR_DELIVERY' },
{ label: '已签收 (DELIVERED)', value: 'DELIVERED' },
{ label: '异常 (EXCEPTION)', value: 'EXCEPTION' }
{ label: '揽收 (GOT)', value: 'GOT' },
{ label: '运输中 (SEND)', value: 'SEND' },
{ label: '派送中 (SENT)', value: 'SENT' },
{ label: '已签收 (SIGNED)', value: 'SIGNED' },
{ label: '异常 (FAILED)', value: 'FAILED' }
]
const currentStatusLabel = computed(() => {
const opt = statusOptions.find(o => o.value === form.status_code)
return opt ? opt.label : '请选择'
const currentStatusLabel = computed((): string => {
const opt = statusOptions.find((o: UTSJSONObject): boolean => o['value'] === form.infoContent)
return (opt != null) ? opt['label'] as string : '请选择'
})
const jsonString = computed(() => {
const jsonString = computed((): string => {
return JSON.stringify(form, null, 2)
})
function selectOrder(index: number) {
selectedOrderIndex.value = index
const order = shippedOrders.value[index]
form.tracking_no = order.tracking_no
form.carrier = order.carrier
form.mailNo = order.tracking_no
form.txLogisticId = order.order_no
form.carrier = order.carrier + '速递'
// 根据订单当前状态智能预设
if (order.status === 'SHIPPED') {
form.status_code = 'IN_TRANSIT'
form.event_text = '快件已揽收,正发往城市中心'
form.infoContent = 'SEND'
form.remark = '快件已到达北京分拨中心'
} else if (order.status === 'IN_TRANSIT') {
form.status_code = 'OUT_FOR_DELIVERY'
form.event_text = '派送员王师傅(13700008888)正在派件'
form.infoContent = 'SENT'
form.remark = '派送员王师傅(13700008888)正在派件'
}
}
function onStatusChange(e: UniPickerChangeEvent) {
const idx = e.detail.value as number
form.status_code = statusOptions[idx].value as string
form.infoContent = statusOptions[idx].value
}
function sendWebhook() {
if (!form.tracking_no) {
if (!form.mailNo) {
uni.showToast({ title: '请先填写运单号', icon: 'none' })
return
}
// 获取当前时间戳作为圆通要求的 acceptTime
const now = new Date()
const Y = now.getFullYear()
const M = (now.getMonth() + 1).toString().padStart(2, '0')
const D = now.getDate().toString().padStart(2, '0')
const h = now.getHours().toString().padStart(2, '0')
const m = now.getMinutes().toString().padStart(2, '0')
const s = now.getSeconds().toString().padStart(2, '0')
form.acceptTime = `${Y}-${M}-${D} ${h}:${m}:${s}`
// 执行模拟推送 (转换为普通对象以兼容 UTS)
const payload = {
tracking_no: form.tracking_no,
carrier: form.carrier,
status_code: form.status_code,
event_text: form.event_text
mailNo: form.mailNo,
txLogisticId: form.txLogisticId,
infoContent: form.infoContent,
remark: form.remark,
acceptTime: form.acceptTime,
carrier: form.carrier
} as UTSJSONObject
const success = mockService.pushWebhookData(payload)