|
|
@@ -6,6 +6,7 @@ import classNames from 'classnames'
|
|
|
import { isDevMode } from '@/utils/env'
|
|
|
import { VList } from 'virtuallist-antd'
|
|
|
import consts from '@/consts'
|
|
|
+import type { ProColumns } from '@ant-design/pro-table'
|
|
|
const { TabPane } = Tabs
|
|
|
|
|
|
export enum Servicelog {
|
|
|
@@ -23,22 +24,22 @@ export const servicelogEnum = {
|
|
|
[Servicelog.VISIT]: {
|
|
|
title: '上门服务',
|
|
|
bg: 'bg-hex-886ab5 bg-opacity-6',
|
|
|
- text: 'text-hex-886ab5 fomt-medium'
|
|
|
+ text: 'text-hex-886ab5 fomt-medium text-sm'
|
|
|
},
|
|
|
[Servicelog.CALL]: {
|
|
|
title: '电话拜访',
|
|
|
bg: 'bg-hex-246daf bg-opacity-6',
|
|
|
- text: 'text-hex-246daf fomt-medium'
|
|
|
+ text: 'text-hex-246daf fomt-medium text-sm'
|
|
|
},
|
|
|
[Servicelog.OTHER]: {
|
|
|
title: '其他事项',
|
|
|
- bg: 'bg-hex-b8795e bg-opacity-6',
|
|
|
- text: 'text-hex-b8795e fomt-medium'
|
|
|
+ bg: 'bg-hex-1ca081 bg-opacity-6',
|
|
|
+ text: 'text-hex-1ca081 fomt-medium text-sm'
|
|
|
},
|
|
|
[Servicelog.ONLINE]: {
|
|
|
title: '在线服务',
|
|
|
bg: 'bg-hex-b8795e bg-opacity-6',
|
|
|
- text: 'text-hex-b8795e fomt-medium'
|
|
|
+ text: 'text-hex-b8795e fomt-medium text-sm'
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -48,9 +49,54 @@ type ClientLowerListProps = {
|
|
|
}
|
|
|
serviceList: API.ServiceLogItem[]
|
|
|
}
|
|
|
+
|
|
|
+export const renderServiceLogItem = (item: API.ServiceLogItem) => {
|
|
|
+ return (
|
|
|
+ <div
|
|
|
+ className={classNames(
|
|
|
+ 'w-full rounded border-hex-886ab5 border-l-2px',
|
|
|
+ servicelogEnum[item.status]?.bg
|
|
|
+ )}>
|
|
|
+ <div className="p-4 flex flex-col">
|
|
|
+ <div className="flex justify-between">
|
|
|
+ <div className="flex">
|
|
|
+ <div
|
|
|
+ className="rounded-1/2 w-8 h-8"
|
|
|
+ style={{
|
|
|
+ backgroundImage: `url(${
|
|
|
+ (isDevMode() ? 'http://cld2qa.com' : 'http://zhcld.com') +
|
|
|
+ (item.avatar ?? consts.DEFAULT_AVATAR)
|
|
|
+ })`,
|
|
|
+ backgroundSize: 'cover'
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <div className="flex flex-col items-center ml-2">
|
|
|
+ <div className="text-sm font-medium text-opacity-80 text-black">{item.staffName}</div>
|
|
|
+ <div className="text-xs text-opacity-40 text-black h-1rem">
|
|
|
+ {dayjsFormat(item.createTime, 'HH:mm:ss')}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div className={servicelogEnum[item.status]?.text}>{servicelogEnum[item.status]?.title}</div>
|
|
|
+ </div>
|
|
|
+ <div className="bg-white bg-opacity-80 rounded-sm text-black text-opacity-60 text-sm mt-4 p-2">
|
|
|
+ {item.mark}
|
|
|
+ </div>
|
|
|
+ <div className="pt-2 flex justify-between">
|
|
|
+ <div />
|
|
|
+ <div className="text-sm text-opacity-80">
|
|
|
+ <span>服务日期:</span>
|
|
|
+ <span className="ml-1">{dayjsFormat(item.date, 'YYYY-MM-DD')}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
const ClientLowerList: React.FC<ClientLowerListProps> = ({ logList: { log: logs = [] }, serviceList }) => {
|
|
|
const tableHeight = (document.body.clientHeight - 48 - 92 - 64 - 120) / 2
|
|
|
- const columns = [
|
|
|
+ const columns: ProColumns<API.LogItem>[] = [
|
|
|
{
|
|
|
title: '日期',
|
|
|
dataIndex: 'createTime',
|
|
|
@@ -61,6 +107,7 @@ const ClientLowerList: React.FC<ClientLowerListProps> = ({ logList: { log: logs
|
|
|
title: '操作人',
|
|
|
dataIndex: 'operatorName',
|
|
|
key: 'operatorName',
|
|
|
+ ellipsis: true,
|
|
|
width: 115,
|
|
|
render: (_, record) => (
|
|
|
<div className="flex items-center">
|
|
|
@@ -82,58 +129,15 @@ const ClientLowerList: React.FC<ClientLowerListProps> = ({ logList: { log: logs
|
|
|
title: '操作',
|
|
|
dataIndex: 'operationType',
|
|
|
key: 'operationType',
|
|
|
- width: 75
|
|
|
+ ellipsis: true,
|
|
|
+ width: 100
|
|
|
},
|
|
|
{
|
|
|
title: '操作内容',
|
|
|
dataIndex: 'content',
|
|
|
- key: 'content',
|
|
|
- width: 150
|
|
|
+ key: 'content'
|
|
|
}
|
|
|
]
|
|
|
- const renderServiceLogItem = (item: API.ServiceLogItem) => {
|
|
|
- return (
|
|
|
- <div
|
|
|
- className={classNames(
|
|
|
- 'w-full rounded border-hex-886ab5 border-l-2px',
|
|
|
- servicelogEnum[item.status]?.bg
|
|
|
- )}>
|
|
|
- <div className="p-4 flex flex-col">
|
|
|
- <div className="flex justify-between">
|
|
|
- <div className="flex">
|
|
|
- <div
|
|
|
- className="rounded-1/2 w-8 h-8"
|
|
|
- style={{
|
|
|
- backgroundImage: `url(${
|
|
|
- (isDevMode() ? 'http://cld2qa.com' : 'http://zhcld.com') +
|
|
|
- (item.avatar ?? consts.DEFAULT_AVATAR)
|
|
|
- })`,
|
|
|
- backgroundSize: 'cover'
|
|
|
- }}
|
|
|
- />
|
|
|
- <div className="flex flex-col items-center ml-2">
|
|
|
- <div className="text-sm font-medium text-opacity-80 text-black">{item.staffName}</div>
|
|
|
- <div className="text-xs text-opacity-40 text-black h-1rem">
|
|
|
- {dayjsFormat(item.createTime, 'HH:mm:ss')}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className={servicelogEnum[item.status]?.text}>{servicelogEnum[item.status]?.title}</div>
|
|
|
- </div>
|
|
|
- <div className="bg-white bg-opacity-80 rounded-sm text-black text-opacity-60 text-sm mt-4 p-2">
|
|
|
- {item.mark}
|
|
|
- </div>
|
|
|
- <div className="pt-2 flex justify-between">
|
|
|
- <div />
|
|
|
- <div className="text-sm text-opacity-80">
|
|
|
- <span>服务日期:</span>
|
|
|
- <span className="ml-1">{dayjsFormat(item.date, 'YYYY-MM-DD')}</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- )
|
|
|
- }
|
|
|
|
|
|
const vList = useMemo(() => {
|
|
|
return VList({
|
|
|
@@ -147,7 +151,7 @@ const ClientLowerList: React.FC<ClientLowerListProps> = ({ logList: { log: logs
|
|
|
<div className="pl-4">
|
|
|
<Tabs>
|
|
|
<TabPane tab="客户服务记录" key="客户服务记录">
|
|
|
- <div className="sheet-panel-record ">
|
|
|
+ <div className="sheet-panel-record">
|
|
|
<TimeLineList<API.ServiceLogItem>
|
|
|
rowkey="id"
|
|
|
mode="card"
|
|
|
@@ -159,7 +163,7 @@ const ClientLowerList: React.FC<ClientLowerListProps> = ({ logList: { log: logs
|
|
|
</TabPane>
|
|
|
<TabPane tab="日志" key="日志">
|
|
|
<div className="sheet-panel-record">
|
|
|
- <Table
|
|
|
+ <Table<API.LogItem>
|
|
|
rowKey="id"
|
|
|
size="small"
|
|
|
columns={columns}
|