[tag] 工单添加二级子菜单
This commit is contained in:
parent
0c16cef12c
commit
bc59c1fb2a
|
|
@ -197,7 +197,9 @@ const local: App.I18n.Schema = {
|
|||
employee: "人员管理",
|
||||
facility: "设施管理",
|
||||
plan: "计划管理",
|
||||
department: "部门管理"
|
||||
department: "部门管理",
|
||||
orders_create: "创建工单",
|
||||
orders_list: "工单列表"
|
||||
},
|
||||
page: {
|
||||
login: {
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
>;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue