chore: release updated anxinyan version
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref } from "vue";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { adminApi, type AdminManualOrderCreatePayload, type AdminManualOrderMeta, type AdminOrderDetail, type AdminOrderListItem, type AdminOrderWarehouseOption } from "../../api/admin";
|
||||
import { adminApi, type AdminExpressCompanyItem, type AdminManualOrderCreatePayload, type AdminManualOrderMeta, type AdminOrderDetail, type AdminOrderListItem, type AdminOrderWarehouseOption } from "../../api/admin";
|
||||
import OrderStatusTag from "../../components/OrderStatusTag.vue";
|
||||
import { recognizeReturnAddress } from "../../utils/address-recognition";
|
||||
|
||||
const loading = ref(false);
|
||||
const detailLoading = ref(false);
|
||||
@@ -18,11 +19,15 @@ const returnDialogVisible = ref(false);
|
||||
const returnSubmitting = ref(false);
|
||||
const returnExpressCompany = ref("");
|
||||
const returnTrackingNo = ref("");
|
||||
const expressCompanyLoading = ref(false);
|
||||
const expressCompanyOptions = ref<AdminExpressCompanyItem[]>([]);
|
||||
const defaultExpressCompany = ref("");
|
||||
const manualDialogVisible = ref(false);
|
||||
const manualSubmitting = ref(false);
|
||||
const manualMetaLoading = ref(false);
|
||||
const manualMeta = ref<AdminManualOrderMeta>({ categories: [], brands: [] });
|
||||
const manualForm = ref<AdminManualOrderCreatePayload>(createManualOrderForm());
|
||||
const manualAddressRecognitionText = ref("");
|
||||
|
||||
const keyword = ref("");
|
||||
const serviceProvider = ref("");
|
||||
@@ -113,6 +118,27 @@ const logisticsActionText = computed(() => {
|
||||
const canSubmitReturnLogistics = computed(() => Boolean(detail.value?.order_info.can_submit_return_logistics));
|
||||
const returnLogisticsBlockReason = computed(() => detail.value?.order_info.return_logistics_block_reason || "");
|
||||
const canMarkReturnReceived = computed(() => Boolean(detail.value?.order_info.can_mark_return_received));
|
||||
const expressCompanySelectOptions = computed(() => {
|
||||
if (!returnExpressCompany.value || expressCompanyOptions.value.some((item) => item.company_name === returnExpressCompany.value)) {
|
||||
return expressCompanyOptions.value;
|
||||
}
|
||||
|
||||
return [
|
||||
{
|
||||
id: 0,
|
||||
company_name: returnExpressCompany.value,
|
||||
company_code: returnExpressCompany.value,
|
||||
status: "enabled",
|
||||
status_text: "启用中",
|
||||
is_default: false,
|
||||
sort_order: 0,
|
||||
remark: "",
|
||||
created_at: "",
|
||||
updated_at: "",
|
||||
},
|
||||
...expressCompanyOptions.value,
|
||||
];
|
||||
});
|
||||
function createManualOrderForm(): AdminManualOrderCreatePayload {
|
||||
return {
|
||||
service_provider: "anxinyan",
|
||||
@@ -185,10 +211,40 @@ async function ensureManualMeta() {
|
||||
|
||||
async function openManualDialog() {
|
||||
manualForm.value = createManualOrderForm();
|
||||
manualAddressRecognitionText.value = "";
|
||||
manualDialogVisible.value = true;
|
||||
await ensureManualMeta();
|
||||
}
|
||||
|
||||
async function ensureExpressCompanyOptions() {
|
||||
if (expressCompanyOptions.value.length) return;
|
||||
expressCompanyLoading.value = true;
|
||||
try {
|
||||
const response = await adminApi.getExpressCompanies({ enabled_only: 1 });
|
||||
expressCompanyOptions.value = response.data.list;
|
||||
defaultExpressCompany.value = response.data.default_company;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ElMessage.error("快递公司列表加载失败");
|
||||
} finally {
|
||||
expressCompanyLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function applyRecognizedManualAddress() {
|
||||
const result = recognizeReturnAddress(manualAddressRecognitionText.value);
|
||||
if (!result.ok || !result.address) {
|
||||
ElMessage.warning(result.message || "寄回地址识别失败");
|
||||
return;
|
||||
}
|
||||
|
||||
manualForm.value.return_address = {
|
||||
...manualForm.value.return_address,
|
||||
...result.address,
|
||||
};
|
||||
ElMessage.success("寄回地址已识别并填入");
|
||||
}
|
||||
|
||||
function validateManualForm() {
|
||||
const form = manualForm.value;
|
||||
if (!form.product_info.category_id) {
|
||||
@@ -312,13 +368,14 @@ async function submitWarehouseReassign() {
|
||||
}
|
||||
}
|
||||
|
||||
function openReturnDialog() {
|
||||
async function openReturnDialog() {
|
||||
if (!detail.value) return;
|
||||
if (!canSubmitReturnLogistics.value) {
|
||||
ElMessage.warning(returnLogisticsBlockReason.value || "当前订单暂不支持登记回寄运单");
|
||||
return;
|
||||
}
|
||||
returnExpressCompany.value = detail.value.return_logistics?.express_company || "";
|
||||
await ensureExpressCompanyOptions();
|
||||
returnExpressCompany.value = detail.value.return_logistics?.express_company || defaultExpressCompany.value || expressCompanyOptions.value[0]?.company_name || "";
|
||||
returnTrackingNo.value = detail.value.return_logistics?.tracking_no || "";
|
||||
returnDialogVisible.value = true;
|
||||
}
|
||||
@@ -735,7 +792,20 @@ onMounted(fetchOrders);
|
||||
<el-dialog v-model="returnDialogVisible" title="登记回寄运单" width="520px">
|
||||
<el-form label-position="top">
|
||||
<el-form-item label="回寄快递公司">
|
||||
<el-input v-model="returnExpressCompany" placeholder="例如:顺丰速运" />
|
||||
<el-select
|
||||
v-model="returnExpressCompany"
|
||||
:loading="expressCompanyLoading"
|
||||
filterable
|
||||
placeholder="请选择回寄快递公司"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in expressCompanySelectOptions"
|
||||
:key="`${item.id}-${item.company_name}`"
|
||||
:label="item.company_name"
|
||||
:value="item.company_name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="回寄运单号">
|
||||
<el-input v-model="returnTrackingNo" placeholder="请输入回寄运单号" />
|
||||
@@ -810,6 +880,18 @@ onMounted(fetchOrders);
|
||||
<div class="manual-section">
|
||||
<div class="manual-section__title">寄回信息</div>
|
||||
<el-form label-position="top">
|
||||
<el-form-item label="自动识别寄回地址">
|
||||
<div class="manual-address-recognition">
|
||||
<el-input
|
||||
v-model="manualAddressRecognitionText"
|
||||
type="textarea"
|
||||
:rows="5"
|
||||
resize="none"
|
||||
placeholder="粘贴收货人、收货电话、收货地址,自动识别后填入下方字段"
|
||||
/>
|
||||
<el-button @click="applyRecognizedManualAddress">识别并填入</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<div class="manual-grid">
|
||||
<el-form-item label="收件人">
|
||||
<el-input v-model="manualForm.return_address.consignee" placeholder="用于匹配或创建用户" />
|
||||
@@ -985,6 +1067,15 @@ onMounted(fetchOrders);
|
||||
gap: 0 18px;
|
||||
}
|
||||
|
||||
.manual-address-recognition {
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.manual-address-recognition .el-button {
|
||||
justify-self: flex-start;
|
||||
}
|
||||
|
||||
.manual-upload-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
Reference in New Issue
Block a user