[tag] 工单添加二级子菜单

This commit is contained in:
LYC 2025-04-25 21:31:05 +08:00
parent 0c16cef12c
commit bc59c1fb2a
7 changed files with 137 additions and 5 deletions

View File

@ -197,7 +197,9 @@ const local: App.I18n.Schema = {
employee: "人员管理",
facility: "设施管理",
plan: "计划管理",
department: "部门管理"
department: "部门管理",
orders_create: "创建工单",
orders_list: "工单列表"
},
page: {
login: {

View File

@ -39,7 +39,8 @@ export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<Ro
manage_user: () => import("@/views/manage/user/index.vue"),
"multi-menu_first_child": () => import("@/views/multi-menu/first_child/index.vue"),
"multi-menu_second_child_home": () => import("@/views/multi-menu/second_child_home/index.vue"),
orders: () => import("@/views/orders/index.vue"),
orders_create: () => import("@/views/orders/create/index.vue"),
orders_list: () => import("@/views/orders/list/index.vue"),
plan: () => import("@/views/plan/index.vue"),
"user-center": () => import("@/views/user-center/index.vue"),
};

View File

@ -363,12 +363,32 @@ export const generatedRoutes: GeneratedRoute[] = [
{
name: 'orders',
path: '/orders',
component: 'layout.base$view.orders',
component: 'layout.base',
meta: {
title: 'orders',
i18nKey: 'route.orders',
order: 20
}
},
children: [
{
name: 'orders_create',
path: '/orders/create',
component: 'view.orders_create',
meta: {
title: 'orders_create',
i18nKey: 'route.orders_create'
}
},
{
name: 'orders_list',
path: '/orders/list',
component: 'view.orders_list',
meta: {
title: 'orders_list',
i18nKey: 'route.orders_list'
}
}
]
},
{
name: 'plan',

View File

@ -207,6 +207,8 @@ const routeMap: RouteMap = {
"multi-menu_second_child": "/multi-menu/second/child",
"multi-menu_second_child_home": "/multi-menu/second/child/home",
"orders": "/orders",
"orders_create": "/orders/create",
"orders_list": "/orders/list",
"plan": "/plan",
"user-center": "/user-center"
};

View File

@ -61,6 +61,8 @@ declare module "@elegant-router/types" {
"multi-menu_second_child": "/multi-menu/second/child";
"multi-menu_second_child_home": "/multi-menu/second/child/home";
"orders": "/orders";
"orders_create": "/orders/create";
"orders_list": "/orders/list";
"plan": "/plan";
"user-center": "/user-center";
};
@ -164,7 +166,8 @@ declare module "@elegant-router/types" {
| "manage_user"
| "multi-menu_first_child"
| "multi-menu_second_child_home"
| "orders"
| "orders_create"
| "orders_list"
| "plan"
| "user-center"
>;

View File

@ -0,0 +1,104 @@
<template>
<a-card title="创建工单">
<a-form
ref="formRef"
:model="formState"
:rules="rules"
@finish="handleSubmit"
layout="vertical"
>
<a-form-item label="设备 ID (facilityId)" name="facilityId" required>
<a-input-number v-model:value="formState.facilityId" placeholder="请输入设备 ID" style="width: 100%;" />
</a-form-item>
<a-form-item label="描述 (description)" name="description" required>
<a-input
v-model:value="formState.description"
type="textarea"
placeholder="请输入工单描述"
style="width: 100%;"
allow-clear
/>
</a-form-item>
<a-form-item label="分配人 ID (assigneeId)" name="assigneeId" required>
<a-input-number v-model:value="formState.assigneeId" placeholder="请输入分配人 ID" style="width: 100%;" />
</a-form-item>
<a-form-item>
<a-button type="primary" html-type="submit">提交</a-button>
<a-button style="margin-left: 8px;" @click="resetForm">重置</a-button>
</a-form-item>
</a-form>
</a-card>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { Form, Card, Button, Input, InputNumber, message } from 'ant-design-vue'; //
import axios from 'axios'; // HTTP
import { useRouter } from 'vue-router'; // 使 Vue Router
import { localStg } from '@/utils/storage';
const formRef = ref(); //
const router = useRouter(); //
//
const formState = reactive({
facilityId: undefined, // ID
description: '', //
assigneeId: undefined, // ID
});
//
const rules = {
facilityId: [
{ required: true, message: '设备 ID 是必填项', trigger: 'blur' },
{ type: 'number', message: '设备 ID 必须是数字', trigger: 'blur' },
],
description: [
{ required: true, message: '描述是必填项', trigger: 'blur' },
{ min: 5, message: '描述至少需要5个字符', trigger: 'blur' },
],
assigneeId: [
{ required: true, message: '分配人 ID 是必填项', trigger: 'blur' },
{ type: 'number', message: '分配人 ID 必须是数字', trigger: 'blur' },
],
};
//
const handleSubmit = async () => {
try {
//await formRef.value.validate(); //
const token = localStg.get('token'); // token
const response = await axios.post('http://localhost:8080/api/work-orders', formState,{
headers: {
Authorization: `Bearer ${token}` // Authorization
}
}); // POST
if (response.data.success) {
message.success('工单创建成功!');
router.push('/orders'); // /orders
} else {
message.error(response.data.errorMsg || '创建失败');
}
} catch (error) {
message.error('表单验证失败或网络错误');
console.error(error);
}
};
//
const resetForm = () => {
formRef.value.resetFields(); //
};
</script>
<style scoped>
.a-card {
max-width: 600px;
margin: 20px auto;
}
</style>