Your Name 9a2e1afe56
All checks were successful
Build and Push Docker Image / build (push) Successful in 5m10s
feat:初始化
2026-01-08 16:35:06 +08:00

161 lines
4.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
MyColumns,
MyPageContainer,
MyProTableProps,
useCurrentPermissions,
} from '@/common';
import { Apis } from '@/gen/Apis';
import {
HouseWorkOrdersLocationEnum,
HouseWorkOrdersStatusEnum,
HouseWorkOrdersTypeEnum,
} from '@/gen/Enums';
import { ProTable } from '@ant-design/pro-components';
import { useSearchParams } from '@umijs/max';
import { Space } from 'antd';
import WorkOrderShow from '../list/modals/WorkOrderShow';
export default function Index({ title = '客户评价' }) {
const [searchParams, setSearchParams]: any = useSearchParams();
const getCurrentPermissions = useCurrentPermissions();
let tableRender = (item: any, action: any) => {
return getCurrentPermissions({
show: <WorkOrderShow item={item} title="详情" reload={action?.reload} />,
});
};
return (
<MyPageContainer
title={title}
enableTabs={true}
tabKey="workorders"
tabLabel={title}
>
<ProTable<Record<any, any>>
{...MyProTableProps.props}
// headerTitle={title}
request={async (params, sort) =>
MyProTableProps.request(
{
...params,
type: [
HouseWorkOrdersTypeEnum.Repair.value,
HouseWorkOrdersTypeEnum.Incident.value,
HouseWorkOrdersTypeEnum.Complaint.value,
],
is_evaluated: true,
status: HouseWorkOrdersStatusEnum.Completed.value,
},
sort,
Apis.WorkOrder.HouseWorkOrders.List,
)
}
columns={[
MyColumns.ID({
search: false,
}),
MyColumns.EnumTag({
title: '工单状态',
dataIndex: 'status',
valueEnum: HouseWorkOrdersStatusEnum,
search: false,
}),
MyColumns.EnumTag({
title: '工单类型',
dataIndex: 'type',
valueEnum: HouseWorkOrdersTypeEnum,
search: false,
}),
MyColumns.EnumTag({
title: '报修位置',
dataIndex: 'location',
valueEnum: HouseWorkOrdersLocationEnum,
}),
{
title: '位置信息',
dataIndex: ['asset_house', 'full_name'],
render: (_, record) => {
return (
<Space>
{record?.asset_house?.full_name
? record?.asset_house?.full_name
: record?.asset_project?.name}
</Space>
);
},
search: {
transform: (value) => {
return { house_name: value };
},
},
},
{
title: '工单描述',
dataIndex: 'content',
search: false,
width: 120, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽)
render: (text) => (
<div
style={{
width: '100%', // 继承列宽
// height: '60px', // 设置固定高度约显示3行文本
overflow: 'hidden', // 超出隐藏
textOverflow: 'ellipsis', // 省略号
display: '-webkit-box',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 1, // 显示3行
}}
>
{text}
</div>
),
},
{
title: '评价星级',
dataIndex: 'evaluation_score',
search: false,
render: (dom: React.ReactNode) => {
// 确保score是1-5之间的有效数字
const score = Number(dom);
const validScore = Math.max(
0,
Math.min(5, isNaN(score) ? 0 : score),
);
// 创建对应数量的星星
return (
<div style={{ color: '#ffd700' }}>
{Array(validScore)
.fill(0)
.map((_, index) => (
<span key={index}></span>
))}
{Array(5 - validScore)
.fill(0)
.map((_, index) => (
<span key={index} style={{ color: '#d9d9d9' }}>
</span>
))}
<span style={{ marginLeft: '8px', color: '#666' }}>
{validScore}
</span>
</div>
);
},
},
// MyColumns.CreatedAt(),
MyColumns.Option({
render: (_, item: any, index, action) => (
<Space key={index}>
<>{tableRender(item, action)}</>
</Space>
),
}),
]}
/>
</MyPageContainer>
);
}