feat: update appraisal ordering and payment flows
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
||||
type AdminOrderDetail,
|
||||
type AdminOrderListItem,
|
||||
type AdminOrderWarehouseOption,
|
||||
type AdminServicePricePackage,
|
||||
} from "../../api/admin";
|
||||
import OrderStatusTag from "../../components/OrderStatusTag.vue";
|
||||
import { recognizeReturnAddress } from "../../utils/address-recognition";
|
||||
@@ -36,7 +37,7 @@ const defaultExpressCompany = ref("");
|
||||
const manualDialogVisible = ref(false);
|
||||
const manualSubmitting = ref(false);
|
||||
const manualMetaLoading = ref(false);
|
||||
const manualMeta = ref<AdminManualOrderMeta>({ categories: [], brands: [] });
|
||||
const manualMeta = ref<AdminManualOrderMeta>({ categories: [], brands: [], service_price_packages: [] });
|
||||
const manualForm = ref<AdminManualOrderCreatePayload>(createManualOrderForm());
|
||||
const manualAddressRecognitionText = ref("");
|
||||
|
||||
@@ -150,11 +151,16 @@ const expressCompanySelectOptions = computed(() => {
|
||||
...expressCompanyOptions.value,
|
||||
];
|
||||
});
|
||||
const manualServicePackages = computed<AdminServicePricePackage[]>(() =>
|
||||
manualMeta.value.service_price_packages.find((item) => item.service_provider === manualForm.value.service_provider)?.packages.filter((item) => item.is_enabled) || [],
|
||||
);
|
||||
let returnRecognitionTimer: ReturnType<typeof setTimeout> | undefined;
|
||||
|
||||
function createManualOrderForm(): AdminManualOrderCreatePayload {
|
||||
return {
|
||||
service_provider: "anxinyan",
|
||||
price_package_id: 0,
|
||||
price_package_code: "",
|
||||
product_info: {
|
||||
category_id: 0,
|
||||
brand_id: 0,
|
||||
@@ -214,6 +220,7 @@ async function ensureManualMeta() {
|
||||
try {
|
||||
const response = await adminApi.getManualOrderMeta();
|
||||
manualMeta.value = response.data;
|
||||
applyManualDefaultPackage(true);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ElMessage.error("补录订单选项加载失败");
|
||||
@@ -222,11 +229,24 @@ async function ensureManualMeta() {
|
||||
}
|
||||
}
|
||||
|
||||
function applyManualDefaultPackage(force = false) {
|
||||
const current = manualServicePackages.value.find((item) => item.id === manualForm.value.price_package_id);
|
||||
if (current && !force) {
|
||||
manualForm.value.price_package_code = current.package_code;
|
||||
return;
|
||||
}
|
||||
|
||||
const target = manualServicePackages.value.find((item) => item.is_default) || manualServicePackages.value[0];
|
||||
manualForm.value.price_package_id = target?.id || 0;
|
||||
manualForm.value.price_package_code = target?.package_code || "";
|
||||
}
|
||||
|
||||
async function openManualDialog() {
|
||||
manualForm.value = createManualOrderForm();
|
||||
manualAddressRecognitionText.value = "";
|
||||
manualDialogVisible.value = true;
|
||||
await ensureManualMeta();
|
||||
applyManualDefaultPackage(true);
|
||||
}
|
||||
|
||||
async function ensureExpressCompanyOptions() {
|
||||
@@ -260,6 +280,10 @@ function applyRecognizedManualAddress() {
|
||||
|
||||
function validateManualForm() {
|
||||
const form = manualForm.value;
|
||||
if (!form.price_package_id) {
|
||||
ElMessage.warning("请选择价格套餐");
|
||||
return false;
|
||||
}
|
||||
if (!form.product_info.category_id) {
|
||||
ElMessage.warning("请选择品类");
|
||||
return false;
|
||||
@@ -474,6 +498,10 @@ watch(returnTrackingNo, () => {
|
||||
}
|
||||
});
|
||||
|
||||
watch(() => manualForm.value.service_provider, () => {
|
||||
applyManualDefaultPackage(true);
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (returnRecognitionTimer) {
|
||||
clearTimeout(returnRecognitionTimer);
|
||||
@@ -523,6 +551,9 @@ onMounted(fetchOrders);
|
||||
<el-table-column prop="appraisal_no" label="鉴定单号" min-width="180" />
|
||||
<el-table-column prop="product_name" label="商品名称" min-width="220" />
|
||||
<el-table-column prop="service_provider_text" label="服务类型" min-width="120" />
|
||||
<el-table-column prop="price_package_name" label="价格套餐" min-width="150">
|
||||
<template #default="{ row }">{{ row.price_package_name || "-" }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下单渠道" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<span>{{ row.source_channel_text }}</span>
|
||||
@@ -615,6 +646,10 @@ onMounted(fetchOrders);
|
||||
<div class="order-detail-item__label">服务类型</div>
|
||||
<div class="order-detail-item__value">{{ detail.order_info.service_provider_text }}</div>
|
||||
</div>
|
||||
<div class="order-detail-item">
|
||||
<div class="order-detail-item__label">价格套餐</div>
|
||||
<div class="order-detail-item__value">{{ detail.order_info.price_package_name || "-" }}</div>
|
||||
</div>
|
||||
<div class="order-detail-item">
|
||||
<div class="order-detail-item__label">下单渠道</div>
|
||||
<div class="order-detail-item__value">{{ detail.order_info.source_channel_text || "-" }}</div>
|
||||
@@ -966,6 +1001,21 @@ onMounted(fetchOrders);
|
||||
<el-option label="中检鉴定" value="zhongjian" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="价格套餐">
|
||||
<el-select
|
||||
v-model="manualForm.price_package_id"
|
||||
style="width: 100%"
|
||||
:disabled="manualServicePackages.length === 0"
|
||||
@change="applyManualDefaultPackage(false)"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in manualServicePackages"
|
||||
:key="item.id"
|
||||
:label="`${item.package_name} / ¥${item.price}`"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="品类">
|
||||
<el-select v-model="manualForm.product_info.category_id" filterable style="width: 100%">
|
||||
<el-option v-for="item in manualMeta.categories" :key="item.id" :label="item.name" :value="item.id" />
|
||||
|
||||
Reference in New Issue
Block a user