add product

This commit is contained in:
Timi
2026-09-03 14:27:40 +08:00
parent 7f669621fb
commit 333999fe21
63 changed files with 5662 additions and 2210 deletions
+53
View File
@@ -0,0 +1,53 @@
<template>
<div v-can="permissionCodes.salesOrder.cancel" class="sales-order-operation">
<t-cell-group v-if="order" title="销售订单" theme="card"><t-cell title="订单号" :note="order.orderNo || order.id" /><t-cell title="当前状态" :note="order.status || '未知'" /></t-cell-group>
<t-form v-if="order" class="form" label-align="left" label-width="6rem">
<t-form-item label="取消原因" required-mark><t-textarea v-model.trim="reason" borderless autosize maxlength="500" placeholder="请输入取消原因" /></t-form-item>
</t-form>
<t-empty v-if="!order" :description="loading ? '正在加载订单' : '订单不存在'" />
</div>
</template>
<script setup lang="ts">
import { useUserStore } from "timi-web-api";
import SalesOrderAPI from "@/api/SalesOrderAPI";
import { useNavBarStore } from "@/store/navBarStore";
import type { SalesOrder } from "@/types/SalesOrder";
import { getErrorMessage } from "@/utils/error";
import { Message } from "@/utils/message";
import { permissionCodes } from "@/utils/permission";
defineOptions({ name: "SalesOrderCancel" });
const route = useRoute(); const router = useRouter(); const navBarStore = useNavBarStore(); const userStore = useUserStore();
const order = ref<SalesOrder>(); const loading = ref(false); const saving = ref(false); const reason = ref("");
async function loadData(): Promise<void> {
const id = String(route.params.id || "");
if (!id) return;
loading.value = true;
try { order.value = await SalesOrderAPI.detail(id); }
catch (error) { Message.error(getErrorMessage(error, "订单加载失败")); }
finally { loading.value = false; }
}
async function save(): Promise<void> {
if (!order.value?.id || !reason.value || saving.value) return;
saving.value = true;
try {
await SalesOrderAPI.cancel({ salesOrderId: order.value.id, reason: reason.value.trim() });
Message.success("订单已取消");
await router.replace(`/management/sales-orders/${order.value.id}`);
} catch (error) { Message.error(getErrorMessage(error, "订单取消失败")); }
finally { saving.value = false; }
}
onMounted(async () => {
if (!userStore.hasPermissions(permissionCodes.salesOrder.cancel)) return;
navBarStore.setRightText("确认取消", "var(--td-danger-color)", save);
await loadData();
});
onUnmounted(() => navBarStore.clearRight());
</script>
<style scoped lang="less">
.sales-order-operation { gap: 1rem; padding: calc(var(--app-nav-height) + 1rem) 1rem 2rem; display: flex; flex-direction: column;
.form { padding: 0 .5rem; background: var(--td-bg-color-container); box-shadow: var(--td-shadow-1); border-radius: 1rem; overflow: hidden; }
}
</style>