import { Empty, Form, message, Modal, Typography } from 'antd';
import _ from 'lodash';
import { useContext, useMemo } from 'react';
import { useIntl } from 'umi';
import CityModal from '../../CityModal';
import CustomTree from '../../CustomTree';
import { relationFeatureCityRemove, relationUserFeatureRemove } from '../api';
import { DetailContext } from '../detail';
import { createCancelInterceptor, dealTreeData } from '../util';
export interface FeatureTabProps {
filterFeatureTreeData: any;
featureCityIds?: any[];
oldFeatureCityIds: any[];
featureTree: any;
detailRefresh: () => void;
ftdRefresh: () => void;
}
const FeatureTab = (props: FeatureTabProps) => {
const {
filterFeatureTreeData,
featureCityIds,
oldFeatureCityIds,
featureTree,
detailRefresh,
ftdRefresh,
} = props;
const { id: appId, useType, type, currentUser, setFeatureCityIds } = useContext(DetailContext);
const { formatMessage } = useIntl();
const featureList = useMemo(() => {
return dealTreeData(featureTree)
?.filter((item: any) => {
if (useType == 'operation') {
return false; // 运营端不进行已绑定过滤
}
return item.isBind && (!item.expiredAt || item.expiredAt * 1000 >= new Date().getTime());
})
?.map((item: any) => `${item.id}`);
}, [featureTree, useType]);
return filterFeatureTreeData?.length ? (
{
return (
<>
{name}
{/* 功能权限绑定城市权限,单个申请暂时隐藏 */}
{useType !== 'single' && item.isReport === 1 && item.type === 3 && (
{
const { cityIds } = values;
setFeatureCityIds?.((prev) => {
const newFeatureCityIds = [...(prev || [])];
const index = newFeatureCityIds.findIndex(
(element) => element.featureId === item.id,
);
if (index !== -1) {
newFeatureCityIds[index].cityIds = cityIds;
} else {
newFeatureCityIds.push({
featureId: item.id,
cityIds,
});
}
return newFeatureCityIds;
});
}}
cityIds={(
featureCityIds?.find((element) => element.featureId === item.id)?.cityIds || []
).map((id: any) => String(id))}
cancelCityCreator={
useType !== 'operation' && type === 1
? (cancelIds: string[], checked: boolean) => {
return new Promise((resolve) => {
if (checked) {
resolve(false);
return;
}
const cityIds =
oldFeatureCityIds?.find((ele) => ele.featureId === item.id)
?.cityIds || [];
const deleteIds = cancelIds
.map((deleteId) => Number(deleteId))
.filter((id) => cityIds.includes(id));
if (!_.isEmpty(deleteIds)) {
Modal.confirm({
title: formatMessage({
id: 'component.ApplyDetail.detail.cancel.tips',
}),
async onOk() {
try {
await relationFeatureCityRemove({
data: [
{
appId,
account: currentUser?.account,
featureId: item?.id,
cityIds: deleteIds,
userId: currentUser?.id,
},
],
});
detailRefresh?.();
message.success(
formatMessage({
id: 'component.ApplyDetail.detail.cancel.success',
}),
);
resolve(false);
} catch (e) {
resolve(true);
}
},
onCancel() {
resolve(true);
},
});
} else {
resolve(false);
}
});
}
: undefined
}
/>
)}
{useType === 'single' && type === 1 && featureList?.includes(String(item.id)) && (
{formatMessage({ id: 'base.common.owned' })}
)}
>
);
}}
checkInterceptor={
useType !== 'operation' && type === 1
? (__, info) => {
const { checked, node } = info;
return createCancelInterceptor({
checked,
formatMessage,
trigger() {
return featureList.includes(String(node?.id));
},
request() {
return relationUserFeatureRemove({
data: [{ appId, userId: currentUser?.id, featureId: node?.id }],
});
},
refresh: () => {
detailRefresh?.();
ftdRefresh?.();
},
});
}
: undefined
}
/>
) : (
);
};
export default FeatureTab;