chore: release updated anxinyan version

This commit is contained in:
wushumin
2026-05-22 21:13:52 +08:00
parent 7e86e2a5ec
commit 78098851f9
29 changed files with 1949 additions and 184 deletions

View File

@@ -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;