feat: update aftersales labels and service type options
This commit is contained in:
@@ -42,9 +42,9 @@ const WORK_ORDER_STATUS_COLOR: Record<AftersalesWorkOrderStatus, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
||||||
software: '软件',
|
software: '软件故障',
|
||||||
hardware: '硬件',
|
hardware: '硬件故障',
|
||||||
other: '其他',
|
maintenance: '售后维保',
|
||||||
};
|
};
|
||||||
|
|
||||||
function AftersalesPage() {
|
function AftersalesPage() {
|
||||||
@@ -369,8 +369,8 @@ function AftersalesPage() {
|
|||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="issueDescription"
|
name="issueDescription"
|
||||||
label="问题反馈"
|
label="问题描述反馈"
|
||||||
rules={[{ required: true, message: '请填写问题反馈' }]}
|
rules={[{ required: true, message: '请填写问题描述反馈' }]}
|
||||||
>
|
>
|
||||||
<Input.TextArea rows={4} placeholder="请描述客户反馈的问题" />
|
<Input.TextArea rows={4} placeholder="请描述客户反馈的问题" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ import './styles/PublicQuery.css';
|
|||||||
import './styles/AftersalesConfirm.css';
|
import './styles/AftersalesConfirm.css';
|
||||||
|
|
||||||
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
||||||
software: '软件',
|
software: '软件故障',
|
||||||
hardware: '硬件',
|
hardware: '硬件故障',
|
||||||
other: '其他',
|
maintenance: '售后维保',
|
||||||
};
|
};
|
||||||
|
|
||||||
function AftersalesConfirmPage() {
|
function AftersalesConfirmPage() {
|
||||||
@@ -199,7 +199,7 @@ function AftersalesConfirmPage() {
|
|||||||
<span className="value">{SERVICE_TYPE_LABEL[order.serviceType] || order.serviceType}</span>
|
<span className="value">{SERVICE_TYPE_LABEL[order.serviceType] || order.serviceType}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="detail-item detail-item-block">
|
<div className="detail-item detail-item-block">
|
||||||
<span className="label">问题反馈</span>
|
<span className="label">问题描述反馈</span>
|
||||||
<span className="value value-block">{order.issueDescription}</span>
|
<span className="value value-block">{order.issueDescription}</span>
|
||||||
</div>
|
</div>
|
||||||
{order.resolutionNote && (
|
{order.resolutionNote && (
|
||||||
@@ -222,10 +222,10 @@ function AftersalesConfirmPage() {
|
|||||||
|
|
||||||
{isClosed && order.signature && (
|
{isClosed && order.signature && (
|
||||||
<div className="aftersales-signature-archived">
|
<div className="aftersales-signature-archived">
|
||||||
<p className="aftersales-signature-tip">客户签名</p>
|
<p className="aftersales-signature-tip">客户确认签名</p>
|
||||||
<img
|
<img
|
||||||
src={order.signature}
|
src={order.signature}
|
||||||
alt="客户签名"
|
alt="客户确认签名"
|
||||||
className="aftersales-signature-archived-img"
|
className="aftersales-signature-archived-img"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -248,7 +248,7 @@ function AftersalesConfirmPage() {
|
|||||||
className="aftersales-signature-preview"
|
className="aftersales-signature-preview"
|
||||||
onClick={() => setShowSignatureOverlay(true)}
|
onClick={() => setShowSignatureOverlay(true)}
|
||||||
>
|
>
|
||||||
<img src={signatureData} alt="客户签名" />
|
<img src={signatureData} alt="客户确认签名" />
|
||||||
<span className="aftersales-signature-preview-hint">点击可重新签名</span>
|
<span className="aftersales-signature-preview-hint">点击可重新签名</span>
|
||||||
</button>
|
</button>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ import type {
|
|||||||
} from '@/types';
|
} from '@/types';
|
||||||
|
|
||||||
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
||||||
software: '软件',
|
software: '软件故障',
|
||||||
hardware: '硬件',
|
hardware: '硬件故障',
|
||||||
other: '其他',
|
maintenance: '售后维保',
|
||||||
};
|
};
|
||||||
|
|
||||||
const WORK_ORDER_STATUS_LABEL: Record<AftersalesWorkOrderStatus, string> = {
|
const WORK_ORDER_STATUS_LABEL: Record<AftersalesWorkOrderStatus, string> = {
|
||||||
@@ -275,7 +275,7 @@ function AftersalesDetailPage() {
|
|||||||
{isAdmin && !isClosed && (
|
{isAdmin && !isClosed && (
|
||||||
<>
|
<>
|
||||||
<Button icon={<UserSwitchOutlined />} onClick={openReassign}>
|
<Button icon={<UserSwitchOutlined />} onClick={openReassign}>
|
||||||
重新分配
|
工单分配
|
||||||
</Button>
|
</Button>
|
||||||
<Button danger icon={<StopOutlined />} onClick={handleForceClose}>
|
<Button danger icon={<StopOutlined />} onClick={handleForceClose}>
|
||||||
强制关闭
|
强制关闭
|
||||||
@@ -325,7 +325,7 @@ function AftersalesDetailPage() {
|
|||||||
{order.authorizationStatus === 'authorized' && order.signature && (
|
{order.authorizationStatus === 'authorized' && order.signature && (
|
||||||
<div style={{ marginBottom: 24 }}>
|
<div style={{ marginBottom: 24 }}>
|
||||||
<div style={{ fontSize: 13, color: '#595959', marginBottom: 8 }}>
|
<div style={{ fontSize: 13, color: '#595959', marginBottom: 8 }}>
|
||||||
客户签名
|
客户确认签名
|
||||||
{order.confirmedAt && (
|
{order.confirmedAt && (
|
||||||
<span style={{ marginLeft: 12, color: '#8c8c8c', fontSize: 12 }}>
|
<span style={{ marginLeft: 12, color: '#8c8c8c', fontSize: 12 }}>
|
||||||
签署时间:{new Date(order.confirmedAt).toLocaleString('zh-CN')}
|
签署时间:{new Date(order.confirmedAt).toLocaleString('zh-CN')}
|
||||||
@@ -334,7 +334,7 @@ function AftersalesDetailPage() {
|
|||||||
</div>
|
</div>
|
||||||
<img
|
<img
|
||||||
src={order.signature}
|
src={order.signature}
|
||||||
alt="客户签名"
|
alt="客户确认签名"
|
||||||
style={{
|
style={{
|
||||||
maxWidth: 480,
|
maxWidth: 480,
|
||||||
width: '100%',
|
width: '100%',
|
||||||
@@ -390,8 +390,8 @@ function AftersalesDetailPage() {
|
|||||||
</Space>
|
</Space>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="issueDescription"
|
name="issueDescription"
|
||||||
label="问题反馈"
|
label="问题描述反馈"
|
||||||
rules={[{ required: true, message: '请填写问题反馈' }]}
|
rules={[{ required: true, message: '请填写问题描述反馈' }]}
|
||||||
>
|
>
|
||||||
<Input.TextArea rows={3} />
|
<Input.TextArea rows={3} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@@ -460,7 +460,7 @@ function AftersalesDetailPage() {
|
|||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<Modal
|
<Modal
|
||||||
title="重新分配技术员"
|
title="工单分配"
|
||||||
open={reassignModalVisible}
|
open={reassignModalVisible}
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setReassignModalVisible(false);
|
setReassignModalVisible(false);
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ import type {
|
|||||||
} from '@/types';
|
} from '@/types';
|
||||||
|
|
||||||
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
const SERVICE_TYPE_LABEL: Record<AftersalesServiceType, string> = {
|
||||||
software: '软件',
|
software: '软件故障',
|
||||||
hardware: '硬件',
|
hardware: '硬件故障',
|
||||||
other: '其他',
|
maintenance: '售后维保',
|
||||||
};
|
};
|
||||||
|
|
||||||
const WORK_ORDER_STATUS_LABEL: Record<AftersalesWorkOrderStatus, string> = {
|
const WORK_ORDER_STATUS_LABEL: Record<AftersalesWorkOrderStatus, string> = {
|
||||||
|
|||||||
+1
-1
@@ -162,7 +162,7 @@ export interface EmployeeSerialResponse {
|
|||||||
pagination: EmployeeSerialPagination;
|
pagination: EmployeeSerialPagination;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AftersalesServiceType = 'software' | 'hardware' | 'other';
|
export type AftersalesServiceType = 'software' | 'hardware' | 'maintenance';
|
||||||
export type AftersalesWorkOrderStatus = 'created' | 'pending_confirmation' | 'closed' | 'rejected';
|
export type AftersalesWorkOrderStatus = 'created' | 'pending_confirmation' | 'closed' | 'rejected';
|
||||||
export type AftersalesAuthorizationStatus = 'pending' | 'authorized' | 'unauthorized';
|
export type AftersalesAuthorizationStatus = 'pending' | 'authorized' | 'unauthorized';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user