Compare commits
5 Commits
15a9f80b7f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
92b77886e4
|
|||
|
45fb34710a
|
|||
|
eaf58e85a8
|
|||
|
d99c91533c
|
|||
|
c4b005adb8
|
@@ -101,7 +101,7 @@ VITE_API_BASE_URL=/api
|
||||
|
||||
### 管理后台
|
||||
|
||||
- 控制台(工单统计)
|
||||
- 企安工单中台(工单统计)
|
||||
- 权限管理
|
||||
- 创建员工时录入姓名、电话、工号、岗位、角色
|
||||
- 角色仅可选择:软件工程师、硬件工程师、商务经理、项目经理
|
||||
@@ -122,7 +122,7 @@ VITE_API_BASE_URL=/api
|
||||
- 管理员可进行工单分配(重新分配工单负责人)或强制关闭工单
|
||||
- 工单状态机:待处理 → 待客户确认 → 已完成 / 已退回
|
||||
- 项目工单
|
||||
- 用于现场勘查、现场实施等项目任务
|
||||
- 用于项目勘察、工程实施、定期维保、商务合作等项目任务
|
||||
- 现场图片最多 18 张,工程师签名后提交完成
|
||||
- 无客户签字环节,完成后形成项目完成电子表单
|
||||
- 用户资料管理
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
@@ -40,7 +40,7 @@ function AdminLayout() {
|
||||
{
|
||||
key: 'dashboard',
|
||||
icon: <DashboardOutlined />,
|
||||
label: '控制台',
|
||||
label: '企安工单中台',
|
||||
onClick: () => navigate('/admin/dashboard'),
|
||||
},
|
||||
{
|
||||
@@ -135,13 +135,13 @@ function AdminLayout() {
|
||||
|
||||
const getTitle = () => {
|
||||
const path = location.pathname;
|
||||
if (path.includes('/dashboard')) return '控制台';
|
||||
if (path.includes('/dashboard')) return '企安工单中台';
|
||||
if (path.includes('/employee-serials')) return '权限管理';
|
||||
if (path.includes('/product-traces')) return '产品溯源';
|
||||
if (path.includes('/project-orders')) return '项目工单';
|
||||
if (path.includes('/aftersales')) return '售后工单';
|
||||
if (path.includes('/profile')) return '用户资料';
|
||||
return '控制台';
|
||||
return '企安工单中台';
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -16,9 +16,10 @@ import './styles/PublicQuery.css';
|
||||
import './styles/AftersalesConfirm.css';
|
||||
|
||||
const PROJECT_TYPE_LABEL: Record<ProjectType, string> = {
|
||||
survey: '现场勘查',
|
||||
implementation: '现场实施',
|
||||
maintenance: '项目维保',
|
||||
survey: '项目勘察',
|
||||
implementation: '工程实施',
|
||||
maintenance: '定期维保',
|
||||
business: '商务合作',
|
||||
other: '其他',
|
||||
};
|
||||
|
||||
@@ -304,7 +305,7 @@ function ProjectOrderCompletePage() {
|
||||
rows={4}
|
||||
value={completionNote}
|
||||
onChange={(e) => setCompletionNote(e.target.value)}
|
||||
placeholder="请描述现场勘查、实施过程和最终完成情况"
|
||||
placeholder="请描述项目勘察、工程实施或现场完成情况"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -38,9 +38,10 @@ import type {
|
||||
import './styles/AftersalesDetail.css';
|
||||
|
||||
const PROJECT_TYPE_LABEL: Record<ProjectType, string> = {
|
||||
survey: '现场勘查',
|
||||
implementation: '现场实施',
|
||||
maintenance: '项目维保',
|
||||
survey: '项目勘察',
|
||||
implementation: '工程实施',
|
||||
maintenance: '定期维保',
|
||||
business: '商务合作',
|
||||
other: '其他',
|
||||
};
|
||||
|
||||
@@ -483,7 +484,7 @@ function ProjectOrderDetailPage() {
|
||||
label="完成说明"
|
||||
tooltip="现场完成后填写,扫码页和电子表单会展示此内容"
|
||||
>
|
||||
<Input.TextArea rows={4} placeholder="请描述现场勘查、实施过程和最终完成情况" />
|
||||
<Input.TextArea rows={4} placeholder="请描述项目勘察、工程实施或现场完成情况" />
|
||||
</Form.Item>
|
||||
|
||||
{canEdit && (
|
||||
|
||||
@@ -40,9 +40,10 @@ const WORK_ORDER_STATUS_COLOR: Record<ProjectOrderStatus, string> = {
|
||||
};
|
||||
|
||||
const PROJECT_TYPE_LABEL: Record<ProjectType, string> = {
|
||||
survey: '现场勘查',
|
||||
implementation: '现场实施',
|
||||
maintenance: '项目维保',
|
||||
survey: '项目勘察',
|
||||
implementation: '工程实施',
|
||||
maintenance: '定期维保',
|
||||
business: '商务合作',
|
||||
other: '其他',
|
||||
};
|
||||
|
||||
|
||||
@@ -2,10 +2,13 @@
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, #dbeafe 0%, #e0e7ff 100%);
|
||||
padding: 48px 20px 48px clamp(32px, 8vw, 120px);
|
||||
background-image: linear-gradient(90deg, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.6) 36%, rgba(255, 255, 255, 0.12) 66%), url('@/assets/img/background.webp');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -13,9 +16,9 @@
|
||||
width: 100%;
|
||||
max-width: 480px;
|
||||
padding: 24px;
|
||||
backdrop-filter: blur(10px);
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
||||
backdrop-filter: blur(14px);
|
||||
background: rgba(255, 255, 255, 0.92);
|
||||
box-shadow: 0 24px 60px -20px rgba(15, 23, 42, 0.36);
|
||||
border-radius: 24px;
|
||||
animation: slideIn 0.5s ease-out;
|
||||
}
|
||||
@@ -63,6 +66,8 @@
|
||||
|
||||
.copyright {
|
||||
margin-top: 32px;
|
||||
width: 100%;
|
||||
max-width: 480px;
|
||||
text-align: center;
|
||||
color: #6B7280;
|
||||
font-size: 14px;
|
||||
@@ -86,4 +91,12 @@
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
margin-right: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.login-container {
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.9) 100%), url('@/assets/img/background.webp');
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -270,7 +270,7 @@ export interface CustomerConfirmRequest {
|
||||
rejectReason?: string;
|
||||
}
|
||||
|
||||
export type ProjectType = 'survey' | 'implementation' | 'maintenance' | 'other';
|
||||
export type ProjectType = 'survey' | 'implementation' | 'maintenance' | 'business' | 'other';
|
||||
export type ProjectOrderStatus = 'created' | 'pending_completion' | 'closed';
|
||||
|
||||
export interface ProjectOrder {
|
||||
|
||||
Reference in New Issue
Block a user